如果请求成功,如何确保我的ajax请求后的代码只运行?

时间:2014-02-02 18:07:30

标签: php jquery html ajax

我有一个链接,删除,从数组中删除一个项目,然后从我的html页面上的表中删除一行。

首先运行ajax请求修改数组,然后删除该行。如果由于某种原因ajax请求失败,那么我认为html表行仍然会被删除。

有没有办法确保ajax请求后续代码只有在成功时运行?我尝试将其移入成功函数,但之后根本没有运行..

这就是我现在设置的方式......

$(document).ready(function () { //delete 
    $(document).on("click", "a[class='del']", function () {
        var ID = $(this).attr("id"); //<----- get the ID of the column      
        $.ajax({
            //contentType: "text",
            url: 'proDel.php', //the url you are sending datas to which will again send the result
            type: 'GET', //type of request, GET or POST
            dataType: 'json', // jQuery will parse the response as JSON
            data: 'val1=' + ID, //Data you are sending 
            success: function (data) {
                // do nothing, array was amended in php file                       
            }
        })

        //Code here that deletes the table row(runs whether the array was changed or not!!
    })
})

5 个答案:

答案 0 :(得分:0)

将删除行的代码移动到成功回调。

$.ajax({
            //contentType: "text",
            url     : 'proDel.php', //the url you are sending datas to which will again send the result
            type    : 'GET', //type of request, GET or POST
            dataType: 'json', // jQuery will parse the response as JSON
            data    : 'val1='+ID, //Data you are sending 
            success : function (data){
                  // Code here that deletes the table row
           }
});

答案 1 :(得分:0)

尝试使用成功参数ajax以及错误来查看是否存在问题,希望这会有所帮助..

$(document).ready(function (){   

  $(document).on("click", "a[class='del']", function(){ 
     var elem = $(this); //to make $(this) accessible in you success callback
     var ID= elem.attr("id"); // get  ID of the column      

     $.ajax({
           url     : 'proDel.php', //the url you are sending datas to
           type    : 'GET', //type of request, GET or POST
           dataType: 'json', // jQuery will parse the response as JSON
           data    : 'val1='+ID, //Data you are sending 
           success : function (data){
                // success, Code here that deletes the table row , do something with 'elem'          
            },
             error: function(x,e) {  
               //log error if any
              console.log("failed with: "+x.status+", e="+e+", response="+x.responseText);
            }
          });

        });    
     });

答案 2 :(得分:0)

从jQuery 1.5开始,您可以使用jQuery.ajax()返回的chainable methods对象。在您的情况下(确保在ajax请求完成时执行代码)您必须使用deferred.always()方法。不知怎的,这样:

$.ajax({
...
})
.always({
//Code here that deletes the table row
})

在早期的jQuery版本中,您必须在complete中使用jQuery.ajax()选项(处理程序)来实现您的目的。

答案 3 :(得分:0)

首先,当查看ajax请求success时,并不意味着请求返回了正确/ true值。这只是意味着另一端有回应。

在我第一次使用和调试ajax调用时,这让我感到沮丧。 我不知道这是否是你在这里工作的一部分,但需要考虑的事情。

其次,要回答你真正的问题,你必须在成功分支中放置一个函数调用,否则它可能永远不会被调用,或者在非确定性时间被调用(异步调用的整个性质) )。

var a = function(){
  $.ajax({
    success : function (){
      //  code here fires if there is a response to your ajax request
      //  you should put in an function callback here to check the response for 
      //  your success conditions.
      //  if your conditions are met, make the changes that you need to
      b();
    }
    failure: function() {
      //  code here fires if the ajax request receives no response
    }

  })
  //  any code here will fire immediately after the ajax call is fired.
  //  it will not wait for the ajax response.
}
var b = function(){
  //  stuff you want to do according to the ajax response parameters
}

答案 4 :(得分:0)

问题可能是您没有返回有效的JSON。

您认为应该将删除表行的代码移动到success回调中是正确的。你说你试过了,但没有执行success回调。

由于您指定了dataType: 'json',jQuery将尝试将响应主体解析为JavaScript对象(或数组或null)。如果无法解析响应主体(因为它不是有效的JSON),jQuery将调用error回调,而不是success回调。

空响应正文无效JSON。你必须至少返回“null”。或者,如果您不打算返回任何数据,只需更改为dataType: 'text'