我确实有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) {
}
}
});
答案 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){
});
}