3

私のjquery ajax呼び出しはデータベースを更新していますが、ページを更新していません。成功パラメータがわかりません 助けてください

jquery:

<script type="text/javascript">
   function changeStatus(userStatus,userId) {
      var getParameters = "userStatus = " + userStatus + "&userId = " + userId;
      $.ajax({
         type: 'GET',
         url: 'blogUsers.php',
         data: getParameters,
         success: function() {
         }
      });
   }
</script>

php:

<?php
   if( isset( $_GET['userId'] ) && isset( $_GET['userStatus'] ) ) {
      $userId = $_GET['userId'];
      $userStatus = $_GET['userStatus'];
      switch( $userStatus ) {
         case "1":
            $changeStatus=0;
            break;
         case "0":
            $changeStatus=1;
            break;
        default:
            $changeStatus="";
   }
   $Query = "UPDATE blog_users SET blog_user_status='$changeStatus' WHERE blog_user_id='$userId'";
   $Result = mysql_query( $Query );
}
?>

これは、ユーザー グリッドがページに表示されている方法です。

function viewUsers() {
$Query="SELECT * FROM blog_users";
$Result=mysql_query($Query);
while ($row=mysql_fetch_array($Result)) {
    $userId=$row['blog_user_id'];
    $userName=$row['blog_user_name'];
    $userEmail=$row['blog_user_email'];
    $userStatus=$row['blog_user_status'];
?>
<tr><td><?php echo $userId; ?></td>
<td><?php echo $userName; ?></td>
<td><?php echo $userEmail; ?></td>
<td><?php if($userStatus==1){echo "Active";}else echo "Banned"; ?></td>
<?php
$action="";
switch($userStatus){
    case "1":
        $action="Ban User";

        break;
    case "0":
        $action="Activate User";
        break;
    default:
        $action="";
}
?>
<td><a href="#" onclick="changeStatus(<?php echo $userStatus; ?>,<?php echo $userId; ?>);"><?php echo $action; ?></a></td>
<?php } } ?>

これが私が関数を呼び出す方法です」

<td><a href="#" onclick="changeStatus(<?php echo $userStatus; ?>,<?php echo $userId; ?>);"><?php echo $action; ?></a></td>

これは、更新する必要がある部分です。

<table class="tablesorter" cellspacing="0"> 
    <thead> 
        <tr> 
        <th class="header">userId</th> 
        <th class="header">userName</th> 
        <th class="header">userEmail</th>
        <th class="header">userStatus</th>
        <th class="header">Actions</th>                     
        </tr> 
    </thead> 
    <tbody> 
        <?php viewUsers(); ?>
    </tbody> 
</table>

実際には、$action変数は、Activate user または Bann user on click に変更する必要があります。

4

2 に答える 2

2

jQuery と PHP は互いに完全に独立していることを覚えておく必要があります。データベース内のデータを単に更新しても、更新するまでページのデータは更新されません。PHP コードはページが最初に読み込まれたときにのみ実行されるためです。後ではありません。あなたがする必要があるsuccessのは、jQuery ajax 呼び出しでメソッドを使用することです。ajax 呼び出しを次のように変更します

$.ajax({
    type:'GET',
    url:'blogUsers.php',
    data:getParameters,
    success:function(data, status, jqxhr) {
      ... set users in view here ...
    }
  });
}

ここでサーバーからデータを返すのはどのような形式ですか? 返されるのは HTMLですかblogUsers.php、それともユーザーの JSON 配列を返しますか? html の場合は、応答関数の本文を次のように設定するだけです。

$(".tablesorter tbody").html(data)

しかし、JSON を返す可能性が最も高いと思いますか?

そうであれば、success メソッド内から HTML を生成する必要があります。このようなものが動作するはずです:

$(".tablesorter tbody tr").remove();
$.each(data, function(user){
  $(".tablesorter tbody").append(
      $("<tr></tr>").append(
          $("<td></td>").append(
              $("<a></a>", {
                  href: "#",
                  onclick: "changeStatus(" + user.userStatus ", " + user.userId + ")",
                  text: user.action
              })
          )
      )
  )
})

このスニペットは、ユーザー オブジェクトにプロパティ name、userId、userStatus、および action があり、ユーザーの応答が単なるユーザー オブジェクトの配列であることを前提としています。

明らかに、必要な形式で html を構築する必要があります。これは単に生成されます。

<tr>
    <td>
        <a href="#" onclick="updateStatus(status, id);">Action here</a>
    </td>
</tr>

しかし、それはあなたにそれがどのように機能するかの大まかなアイデアを与えます

于 2013-06-24T00:24:26.340 に答える
0

ほとんどすべてのコードを実行しました。私が確信しているのは、更新されたデータを表示するコードであるphpコードが、onclickイベントによってテーブルが更新される前に実行されたことです。

次のようにページをリロードしてみてください。

success:function() { //you will not have to pass any parameter 
                     on the function because you all done the show data in your `viewUsers()`.
  //your page here, e.g window.location.href: 'bla2.php';     
}
于 2013-06-24T01:57:59.693 に答える