我有一个ajax请求可能需要很长时间才能返回响应。
tt_content.image.20.1 {
file.width.override {
override = 200c
override.if {
equals.field = layout
value = 1
}
}
}
如果请求需要几分钟,那么一切都按预期工作。但如果响应时间超过10分钟;我收到以下错误:
#does not work
tt_content.image.20.1.file.width = CASE
tt_content.image.20.1.file.width {
key.field = layout
1 = TEXT
1.value = 200c
2 = TEXT
2.value = 400c
}
但是在服务器上,我仍然可以看到我的请求正在处理中。完成该过程后,我可以看到它发送 $.ajax({
type: 'POST',
url: 'some_url',
data: data,
processData: false,
contentType: false,
headers: {
"Authorization": 'Token token="'+some_token+'"'
}
}).then(function(){
do_something();
});
响应。但我相信,自从遇到错误以来,没有人听取回应。
我想让用户知道该过程已经完成。
有没有人知道处理此问题的“最佳做法”?
非常感谢任何帮助。
答案 0 :(得分:0)
由于Ajax是同步的,我喜欢申请承诺。从我的头脑中,我相信这就像下面这样:
function send_ajax(url, data, some_token) {
var ajax = $.ajax({
type : 'POST',
url : url,
data : data,
processData : false,
contentType : false,
headers : {
"Authorization" : 'Token token="' + some_token + '"'
}
})
return ajax.promise();
}
send_ajax("url","data","some_token").done(function(result) {
console.log(result);
do_something();
});
结果是承诺的,当返回执行完成后的函数。 10分钟似乎确实很长时间。
编辑:不是解决方案
正如我所指出的那样,原始的Ajax调用仍然在其上下文中。意味着then()
方法将处理返回的调用。我选择的解决方案不适用于OP问题。
作为参考,当ajax逻辑放在其自己的函数中并且返回值时,选择的解决方案确实处理异步障碍。