首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让jQuery.ajax在单个子句中同时涵盖错误()和完整()?

如何让jQuery.ajax在单个子句中同时涵盖错误()和完整()?
EN

Stack Overflow用户
提问于 2014-05-23 16:35:56
回答 2查看 455关注 0票数 0

我有一个幻灯片,它使用ajax调用来获取数据,如下所示:

代码语言:javascript
运行
复制
jQuery.ajax({
    dataType: "json",
    timeout:8000,
    url:    full_fallback_uri,
    success: function(result) {
        //do stuff
    }, 
    error: function() {
        self.skip();
    }, 
    complete: function(xhr, data) {
        if (xhr.status != 200) {
            self.skip();
        }
    },                      
    asynch: false,
});

因此,如果ajax调用失败,则调用skip()以跳过当前幻灯片。

现在上面的设置不起作用了,因为在出现错误的情况下,skip()会被调用两次,从而导致双跳(跳过两个幻灯片而不仅仅是当前的幻灯片)。

如果我忽略了错误()或完整()(检查http状态!= 200),这是不够的,它没有涵盖所有可能的错误。

我如何写一个既涵盖错误,又涵盖完整案例的子句?

像这样的东西有用吗?

代码语言:javascript
运行
复制
jQuery.ajax({
    dataType: "json",
    timeout:8000,
    url:    full_fallback_uri,
    success: function(result) {
        //do stuff
    }, 
    error: function() {
        this.myErrorSign = true; //DEFINING MY OWN VARIABLE ON THIS jQuery.ajax object
        this.complete(); //MANUALLY CALL THE COMPLETE FUNCTION, IN CASE THIS ISN'T DONE AUTOMATICALLY UPON FAIL
    }, 
    complete: function(xhr, data) {
        if (xhr.status != 200 || this.myErrorSign == true) { //LOOK NOT ONLY FOR STS!=200 BUT ALSO FOR THE VARIABLE THAT WAS DEFINED IN THE ERROR CASE ABOVE
            self.skip();
        }
    },                      
    asynch: false,
});

或者,这个设计可能也有类似的缺陷,在某些情况下,也可以将skip()调用为相同的两倍?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-23 16:51:22

使用以下简单的逻辑,您就不会出错--您已经非常接近了。

  1. error回调总是在 complete回调之前触发(无论何时)。拥有两个回调都可以看到的变量,比如在ajax调用之前,error = false;最初设置为false
  2. error回调集中,error = true;就是这样。
  3. complete回调()中,此回调总是激发--使用以下命令: if( error || (xhr.status != 200) ) { self.skip(); } //done ... you may want to have a way to reset error = false before a re-run

请注意,每个回调中的this指向回调函数,因此是本地的.有一个范围更广的变量..。在ajax调用之外。由于complete回调在错误和成功时触发,因此不需要显式调用它。:)

票数 1
EN

Stack Overflow用户

发布于 2014-05-23 16:39:50

您可以只使用 .always,并且不同的是参数是否来自错误:

代码语言:javascript
运行
复制
var ajaxRequest = jQuery.ajax({
    /* only settings, no callbacks, no error: fn(){}! */
});

ajaxRequest.always(function (jqXhr, statusText) {
    // gets called on complete and on error
    if (statusText === 'error') {
        skip();
    }
});

在我的本地机器上工作,当被调用的服务器关闭时。

看看关于这方面的jQuerys文档

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23834365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档