jQuery   发布时间:2022-04-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jQuery jqXHR – 取消链接调用,触发错误链大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个与我的服务器方法接口的ajax实用程序.我想从jQuery.ajax()调用返回的对象中使用jQuery 1.5延迟方法.情况如下.

> serveride方法总是返回一个JSON对象:

{success:true | false,data:…}
>客户端实用程序启动这样的ajax调用

var jqxhr = $.ajax({…});
>问题区域:

jqxhr.success(function(data,textStatus,xhr) {
     if(!data || !data.success) { 
         ???? // abort processing,trigger error
     }
});
return jqxhr; // return to caller so he can attach his own handlers

所以问题是如何取消所有调用者的附加成功回调一个触发器他的错误处理程序在提到与???? ?

文档说明了延迟函数调用列表是FIFO,所以我的成功处理程序绝对是第一个.

解决方法

(更新:
请注意,目前,jQuery Promises与 Promises/A+ specification不兼容 – this answer.更多信息)

在您创建AJAX请求的函数中,您还可以创建一个延迟对象,并在将其解析和拒绝函数绑定到相应的$.ajax请求的回调之后,再通过一些自定义数据验证返回给调用者,如下所示:

function makerequest() {

    var deferred = $.Deferred();
    var promise = deferred.promise();

    var jqxhr = $.ajax({
        // ...
    });

    jqxhr.success(function(data,status,xhr) {
        if (!data || !data.success) {
            deferred.reject(jqxhr,'error');
        } else {
            deferred.resolve(data,xhr);
        }
    });

    jqxhr.error(function(jqXHR,error) {
        deferred.reject(jqXHR,error);
    });

    return promise;
}

现在任何人都可以使用它像任何这样的承诺你的功能

var request = makerequest();

request.done(successCallBACk);
request.fail(errorCallBACk);

甚至只是:

@H_12_10@makerequest().then(successCallBACk,errorCallBACk);

如果你也添加这个:

promise.success = promise.done;
    promise.error = promise.fail;

那么你的调用者将拥有(或许更熟悉).success()和.error()的接口,就像纯$.ajax()调用一样:

var request = makerequest();

request.success(successCallBACk);
request.error(errorCallBACk);

(.complete()的实现作为读者的练习.)

看到这个演示:

> http://jsfiddle.net/_rsp/r2YnM/
> http://jsfiddle.net/_rsp/r2YnM/1/(更详细)

这是另一个直接从一个工作项目中拉出来的例子:

function ajax(url,data) {
    var self = this;
    var deferred = $.Deferred();
    var promise = deferred.promise();

    var jqxhr = $.ajax({
        url: url,data: JSON.Stringify(data),contentType: "application/json; charset=utf-8",dataType: 'json',type: 'POST'
    }).done(function (msg,xhr) {
        if (!msg || msg.Error) {
            self.doError(msg.Error);
            deferred.reject(jqxhr,'error');
        } else {
            deferred.resolve(msg,xhr);
        }
    });

    return promise;
}

大佬总结

以上是大佬教程为你收集整理的jQuery jqXHR – 取消链接调用,触发错误链全部内容,希望文章能够帮你解决jQuery jqXHR – 取消链接调用,触发错误链所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。