AJAX .done() returns 实际响应成功前
AJAX .done() returns before actual response is successful
我有以下代码等待 AJAX 请求成为 completed/successful 然后它将重定向到不同的 url.
这是我的 AJAX 请求的样子
function UploadFile(contoller, File, RecordID, AuxID) {
console.log("initialize uploading file: " + RecordID);
const formData = new FormData();
formData.append('RecordID', RecordID);
formData.append('AuxID', AuxID);
formData.append('File', File);
return $.ajax({
type: "POST",
url: contoller,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
data: formData,
dataType: 'json'
})
}
我有另一个函数调用 AJAX 请求并重定向到另一个 url 如果响应成功(即:文件已成功上传到服务器)
UploadFile(controller,
file,
ID
).done(
// redirects to different url
).fail(
console.log("file failed to upload")
);
但是,我注意到 .done() 总是在文件完成上传到服务器之前执行。
如果我使用以下代码“成功”,那么它运行良好。成功参数后的回调函数只有在上传过程完成后才会调用。
$.ajax({
type: "POST",
url: controller,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
data: formData,
success: () => {
// redirects to url
})
},
error: function (ret) {
},
dataType: 'json'
});
我在其他 posts/documentation 中读到,新的 jquery 将“成功”替换为“.done()”,所以它们基本上是一样的,对吧?但是,我不确定为什么 .done() 对我的代码不起作用。
完成和失败都需要传递给它们的回调函数。
$.ajax returns 一个 jqXHR 对象。该对象包含 done 和 fail 方法。从这个 documentation 我们有:
deferred.done( doneCallbacks [ doneCallbacks ] )
其中:
完成回调
类型:函数()
解析 Deferred 时调用的函数或函数数组。
所以一个例子看起来像这样:
$.get( "test.php" ).done(function() {
alert( "$.get succeeded" );
});
我有以下代码等待 AJAX 请求成为 completed/successful 然后它将重定向到不同的 url.
这是我的 AJAX 请求的样子
function UploadFile(contoller, File, RecordID, AuxID) {
console.log("initialize uploading file: " + RecordID);
const formData = new FormData();
formData.append('RecordID', RecordID);
formData.append('AuxID', AuxID);
formData.append('File', File);
return $.ajax({
type: "POST",
url: contoller,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
data: formData,
dataType: 'json'
})
}
我有另一个函数调用 AJAX 请求并重定向到另一个 url 如果响应成功(即:文件已成功上传到服务器)
UploadFile(controller,
file,
ID
).done(
// redirects to different url
).fail(
console.log("file failed to upload")
);
但是,我注意到 .done() 总是在文件完成上传到服务器之前执行。
如果我使用以下代码“成功”,那么它运行良好。成功参数后的回调函数只有在上传过程完成后才会调用。
$.ajax({
type: "POST",
url: controller,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
data: formData,
success: () => {
// redirects to url
})
},
error: function (ret) {
},
dataType: 'json'
});
我在其他 posts/documentation 中读到,新的 jquery 将“成功”替换为“.done()”,所以它们基本上是一样的,对吧?但是,我不确定为什么 .done() 对我的代码不起作用。
完成和失败都需要传递给它们的回调函数。
$.ajax returns 一个 jqXHR 对象。该对象包含 done 和 fail 方法。从这个 documentation 我们有:
deferred.done( doneCallbacks [ doneCallbacks ] )
其中:
完成回调 类型:函数() 解析 Deferred 时调用的函数或函数数组。
所以一个例子看起来像这样:
$.get( "test.php" ).done(function() {
alert( "$.get succeeded" );
});