jQuery AJAX 请求事件 - done、fail、success

5
我有这样的代码
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
            }
        });

Fail(失败)和done(完成)只是例子,如果在内部使用complete(完成),它也不起作用。但是如果在外部使用它:

ajaxrequest.complete(f(){});

一切都运作正常...我知道应该使用“成功”而不是“完成”,但这不是我的重点。这里有什么问题?


1
你需要使用 successerror - Arun P Johny
不要忘记给我的回答点赞并接受,如果它对你有用的话。 - Pranay Rana
3个回答

7

如果您想使用第二个选项,则需要使用success和error方法。这是一个没有使用Promise的Ajax请求示例,其中您可以将success和error函数作为参数获取。

 $.ajax({url:"demo_test.txt"
      ,error : function (xhr,status,error)
        { //alert error}
      ,success:function(result){
      $("#div1").html(result);
    }});

在第一种选项中,您使用了由ajax请求返回的promise对象,这就是您获得done和fail方法的原因。

这是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 );
});

谢谢。我现在有点明白了。 - zmajeric
@user3271259 - 你可以在jQuery官网或谷歌上了解Promise对象...别忘了点赞并接受答案。 - Pranay Rana

0

弃用通知:自jQuery 3.0起,jqXHR.success()、jqXHR.error()和jqXHR.complete()回调已被移除。您可以使用jqXHR.done()、jqXHR.fail()和jqXHR.always()代替。


-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" );
});

这是一项学校作业,我使用了第一个可用的方法。此外,AJAX请求是必需的,所以那就是我的选择。 - zmajeric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接