我有类似的代码
var ajaxrequest = $.ajax({
type: "POST",
dataType: "json",
url: "xy.php",
data: {
action : "read"
}
}).fail(function(){
//something to do when ajaxreq fails
}).done(function(data){
//something to do when ajaxreq is done
});
这没有问题。我的问题是为什么这不起作用:
var ajaxrequest = $.ajax({
type: "POST",
dataType: "json",
url: "n3_vaje_api.php", //Relative or absolute path to response.php file
data: {
action : "read",
},
fail:function(){
//something to do when ajaxreq fails
},
done:function(data){
//something to do when ajaxreq is done
}
});
失败和完成只是示例,如果在内部使用完成也不起作用。但在外面使用它像:
ajaxrequest.complete(f(){});
工作得很好......我知道我应该使用成功而不是完成,但这不是我的观点。 什么交易在这里?
答案 0 :(得分:6)
您需要使用成功,如果您想使用第二个选项
,则需要使用错误这是没有承诺的ajax请求的示例,其中您获得成功并将错误函数作为参数
$.ajax({url:"demo_test.txt"
,error : function (xhr,status,error)
{ //alert error}
,success:function(result){
$("#div1").html(result);
}});
在第一个操作中,您正在使用promise对象返回ajax requst,这是您完成和失败方法的原因。
这是promise对象的示例,在下面的示例请求是promise对象
var request = $.ajax({
url: "script.php",
type: "POST",
data: { id : menuId },
dataType: "html"
});
request.done(function( msg ) {
$( "#log" ).html( msg );
});
request.fail(function( jqXHR, textStatus ) {
alert( "Request failed: " + textStatus );
});
答案 1 :(得分:0)
弃用通知:从jQuery 3.0开始,jqXHR.success(),jqXHR.error()和jqXHR.complete()回调被删除。您可以使用jqXHR.done(),jqXHR.fail()和jqXHR.always()代替。
答案 2 :(得分:-1)
您可以简单地使用$ .post而不是$ .ajax和json作为第四个参数。
$.post("n3_vaje_api.php", {action : "read"}, function(response) {
// Do something with the request
}, 'json')
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});