我有一个链接,删除,从数组中删除一个项目,然后从我的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!!
})
})
答案 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'
。