在选择表单中使用AJAX

时间:2013-08-20 19:27:26

标签: php mysql ajax

我正在构建一个简单的错误跟踪工具。 我想添加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(); 


}); 

我做错了什么,因为我不工作?

2 个答案:

答案 0 :(得分: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";      
} 

答案 1 :(得分:0)

你不能像那样使用ajax。您应该使用示例表单第一个注释,或者您应该在数据属性中设置值,如此数据:{status:$(&#34; #status&#34;)。val(),bugID:$(&#34;# BUGID&#34;)VAL()},
如果你使用它从ajax中删除dataType。在html中,您必须将隐藏字段的ID设置为&#34; bugID&#34;并使用一次。在php文件中你应该删除这行代码&#34; $ result = mysql_real_escape_string($ sql),因为你的$ result永远不会是真的。