Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让jQuery.ajax同时覆盖error();单子句中的complete()?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何让jQuery.ajax同时覆盖error();单子句中的complete()?

Javascript 如何让jQuery.ajax同时覆盖error();单子句中的complete()?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个幻灯片,它使用ajax调用获取我的数据,如下所示: jQuery.ajax({ dataType: "json", timeout:8000, url: full_fallback_uri, success: function(result) { //do stuff }, error: function() { self.skip(); }, complete: function(

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

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()会被调用两次,导致双重跳过(跳过两张幻灯片,而不仅仅是当前幻灯片)

如果我漏掉了其中一个 错误() 或者 complete()(检查http状态!=200) 这还不够,一个不能涵盖所有可能的错误

我如何编写一个涵盖错误和完整案例的子句

你喜欢这个工作吗

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()也会有两次?

您只能调用
。无论参数是否来自错误,都要始终
,并区别:

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();
    }
});
当调用的服务器关闭时,在本地计算机上工作


签出。

您只能
。始终
,并区分参数是否来自错误:

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();
    }
});
当调用的服务器关闭时,在本地计算机上工作


检查。

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

  • 错误
    回调总是在
    完成
    回调之前(无论何时)触发。有一个可以被两个回调看到的变量,比如
    error=false最初设置为
    false

  • error
    回调集中
    error=true就是这样

  • complete
    callback-中,此回调始终激发-使用以下命令:

    if(错误| |(xhr.status!=200)){
    self.skip();
    } 
    //完成。。。在重新运行之前,您可能需要一种重置error=false的方法


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

    使用以下简单的逻辑,你不会出错-你很接近

  • 错误
    回调总是在
    完成
    回调之前(无论何时)触发。有一个可以被两个回调看到的变量,比如
    error=false最初设置为
    false

  • error
    回调集中
    error=true就是这样

  • complete
    callback-中,此回调始终激发-使用以下命令:

    if(错误| |(xhr.status!=200)){
    self.skip();
    } 
    //完成。。。在重新运行之前,您可能需要一种重置error=false的方法



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

    很明显,你在编写的代码中会出现很多错误?这是一种API,所以我没有完全的控制权。我真的不知道你在做什么,但我已经知道你做错了什么。错误处理程序总是在出现错误时启动,如果状态码不是200,并且没有调用错误处理程序,您可能会遇到什么错误?我在本地主机上运行此操作时,internet电缆断开,但什么也没有发生(没有完成()和没有始终()。也许我定义错了…@MattiasSvensson在旁注中,您使用的方法已被弃用:弃用注意:从jQuery 1.8开始,jqXHR.success()、jqXHR.error()和jqXHR.complete()回调已被弃用。若要准备最终删除它们的代码,请使用jqXHR.done()、jqXHR.fail()和jqXHR.always()相反。那么你显然期待在你正在编写的代码中出现很多错误?这是一种API,所以我没有完全的控制权。我真的不知道你在做什么,但我已经知道你做错了什么。错误处理程序总是会在错误时触发,在状态代码不存在的情况下,你可能会遇到什么错误200并且没有调用错误处理程序?我在断开internet电缆的情况下在本地主机上运行此操作,但什么也没有发生(没有complete()和no always()。也许我定义错了…@mattiasvensson在旁注中,您使用的方法已被弃用:弃用注意:jqXHR.success()、jqXHR.error()和jqXHR.complete()从jQuery 1.8开始,回调已被弃用。要准备代码以便最终删除回调,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。
    always===complete
    @adeeo弃用注意:jqXHR.success()、jqXHR.error()和jqXHR.complete()从jQuery 1.8开始,回调就不推荐使用。要准备代码以便最终删除回调,请使用jqXHR.done()、jqXHR.fail()和jqXHR.always()相反。我想,我不是很清楚我的意思。更新了我的答案。@Robinbanbaalen-那很好,但是建议在
    完成后使用
    总是
    没有任何意义,因为他们做的事情完全一样。
    失败
    总是
    使用承诺接口,但是他们使用的东西与
    完成时完全一样te
    error
    ,它们实际执行回调的时间没有区别。
    始终
    继承自deferred.always。它所做的是
    始终===complete
    @adeneo弃用注意:jqXHR.success()、jqXHR.error()和jqXHR.complete()从jQuery1.8开始,回调就不再被使用了。为了准备代码以便最终删除它们,请改用jqXHR.done()、jqXHR.fail()和jqXHR.always()。我想我还不太清楚