0

シンプルなバグ追跡ツールを構築しています。AJAXを追加したい。

プロジェクトを作成したら、バグを追加し、このバグにステータス (未解決または解決済み) を与えることができます。ボタンとAJAXを使用してこのステータスを変更したい。

このフォームからステータスを変更できます。

    <form action="ajax/bugStatus.class.php" method="post">
          <label> Change Bug Status </label>
          <select name="status" id="status">
               <option value="Unsolved">Unsolved</option>
               <option value="Solved">Solved</option>
           </select>
           <input type='hidden' name='bugID' 
           value="
           <?php 
           $row = mysqli_fetch_array($bugres);             
           echo $row['id'];
           ?>
           "> 
           <input type='hidden' name='bugID' value="<?php echo $id;?>"> 
           <input name="btnChange" id="btnChange" class="small button" value="Change Status" type="submit"> 
    </form>

これは bugStatus.class.php ファイルです。

 $status    = $_POST['status'];
 $bugID     = $_POST['bugID'];

 $sql=" UPDATE bugs SET status = '$status' where id = $bugID ";  

 $result = mysql_query($sql); 
 $result = mysql_real_escape_string($sql); 

 if($result){
      header('Location: ../bugpage.php?id='.$bugID); 
      } else { 
      echo "There is something wrong. Try again later."; } 
      mysql_close();

これは、AJAX が実装されている app.Change.js ファイルです。

            $("#btnChange").on("click",function(e){

    var update = $("#post").val();

    // AJAX CALL naar ajax/save_tweet.php
    var request = $.ajax({
    url: "ajax/bugStatus.class.php",
    type: "POST",
    data: {update : update}, 
    dataType: "json"
    });


    request.done(function(msg) {
    if(msg.status = "sucess")
    {
        // OK
        var select = update;
    }
    else
    {
        // NOT OK
    }
    });

    request.fail(function(jqXHR, textStatus) {
    alert( "Request failed: " + textStatus );
    });

    e.preventDefault(); 


}); 

うまくいかないのに何が悪いの?

4

2 に答える 2

0

そのような ajax を使用することはできません。サンプルフォームの最初のコメントを使用するか、データプロパティで次のように値を設定する必要があります data:{status:$("#status").val(),bugID:$("#bugID").val()} 、
それを使用する場合は、ajax から dataType を削除します。html では、非表示フィールドの ID を「bugID」に設定し、一度使用する必要があります。そしてphpファイルでは、このコード行「$result = mysql_real_escape_string($sql)」を削除する必要があります.

于 2013-08-20T19:50:39.957 に答える
0

まず、id=post の要素がないのでvar update = $("#post").val();空欄になります。代わりに、シリアル化されたフォームを送信することをお勧めします$("form").serialize()

第 2 に、Ajax ハンドラーで JSON を返すのではなく、プレーン テキストを返しているため、dataType: json(JSON_encode を使用して有効な JSON をエコーする) を削除します。

var request = $.ajax({
    url: "ajax/bugStatus.class.php",
    type: "POST",
    data: $("form").serialize(),        // status=Unsolved&bugID=123
});

3 番目に、フォームに間違いがあります。bugID入力が重複しています (ただし、それが壊れるかどうかはわかりません)。

第 4 に、成功時に Ajax リクエストに実際に何も返していませんか? 「成功」を期待しているようですが、その場合は次のようにします。

if($result){
    echo "success";      
} 
于 2013-08-20T19:31:50.147 に答える