jQuery AJAX 请求事件 - 完成,失败,成功

jQuery AJAX request events - done,fail,success

本文关键字:失败 成功 完成 AJAX 请求 事件 jQuery      更新时间:2023-09-26

我有这样的代码

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(){});

工作正常...我知道我应该使用成功而不是完成,但这不是我在这里的重点。这是怎么回事?

如果你想

使用第二个选项,你需要使用成功和错误是你需要使用的方法

这是没有承诺的 Ajax 请求的示例,其中您将获得成功和错误函数作为参数

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

在第一个操作中,您正在使用 ajax 请求返回的承诺对象,这就是您完成和失败方法的原因。

这是承诺对象

的示例,在下面的示例中请求是承诺对象

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

弃用通知:jqXHR.success()、jqXHR.error() 和 jqXHR.complete() 回调从 jQuery 3.0 开始被删除。你可以使用 jqXHR.done()、jqXHR.fail() 和 jqXHR.always() 来代替。

你可以简单地使用 $.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" );
});