0

我正在构建一个简单的错误跟踪工具。我想添加 AJAX。

当你创建了一个项目后,你可以添加一个 bug,你可以给这个 bug 一个状态(未解决或已解决)。我想用一个按钮和使用 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

首先,没有 id=post 的元素,所以var update = $("#post").val();将是空白的。相反,您可能想要发送序列化表单$("form").serialize()

其次,您在 Ajax 处理程序中返回的不是 JSON,而是纯文本——因此,删除dataType: json(或者使用 JSON_encode 来回显有效的 JSON)。

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

第三,您的表单中有错误,您有重复的bugID输入(但不确定是否会破坏它)。

第四,您实际上并没有在成功时向 Ajax 请求返回任何内容?看起来你期待“成功”,在这种情况下你会想要:

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

你不能像那样使用ajax。您应该使用示例表单第 1 条评论,或者您应该在您的数据属性中设置如下数据:{status:$("#status").val(),bugID:$("#bugID").val()} ,
如果您使用从 ajax 中删除数据类型。在 html 中,您必须将隐藏字段的 id 设置为“bugID”并使用一次。在 php 文件中你应该删除这行代码 "$result = mysql_real_escape_string($sql),因为你的 $result 永远不会是真的。

于 2013-08-20T19:50:39.957 回答