同步AJAX在错误

时间:2016-10-14 09:54:59

标签: javascript jquery ajax

我确实有AJAX请求,并且成功回调了一个新的功能来rendergooglelinks和另一个AJAX调用被调用。

现在,我尝试在AJAX请求中使用async:false将异步调用更改为syncronous。

当我执行AJAX请求时,由于"未定义"而无法呈现rendergooglelinks。错误和下一个ajax请求有效。

在同步的ajax请求中,rendergooglelinks错误后进度停止。不会触发下一个呼叫。 (即)不处理该错误后的代码。

同步的ajax请求是否因错误而停止?

是否表现为"严格"模式?

我们如何处理这个?

// syncronous request  
$.ajax({

    type:"GET",

    async: false,

    url: url,

    success: function(result, status, xhr) {

        rendergooglelinks();

        renderComments(); // this is not called due to error in the above 
    }

});

function rendergooglelinks() 
{

    google.test = ''; // returns error

}

function renderComments()
{

    // asyncronous request
    $.ajax({

        type:"GET",

        url: url,

        success: function(result, status, xhr) {

        }
    }
});

1 个答案:

答案 0 :(得分:0)

根据您发布的代码,错误是永远不会声明变量google,因此无法分配google.test
另一方面,同步ajax调用不是一个好习惯,尽可能避免使用它们。

最后但不是最后一次来自jQuery.ajax() docs:

  

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

对于google变量,我建议你将它作为参数传递给函数,假设无论什么存在都是危险的。
对于其他错误,请尝试以下操作:

$.ajax({
  type:"GET",
  //async: false,
  url: url,
  /*success: function(result, status, xhr) {
    rendergooglelinks();
    renderComments(); // this is not called due to error in the above 
  }*/

}).then([ //success callbacks
    rendergooglelinks,
    renderComments
],[
    //no fail callbacks
]);

function rendergooglelinks(){
     google.test = ''; // returns error
}

function renderComments(){
    // asyncronous request
    $.ajax({
        type:"GET"
        url: url,
       /*success: function(result, status, xhr) {

       }*/
    }).done(function(result, status, xhr){
    });
}

另见jQuery Deferred