我正在编写一个用于上传文件的脚本。我想在上传之前检查文件是否存在,然后最终将为用户提供覆盖选项。
我已将代码从正常流程中删除,以确保其他问题不会影响它。
我将文件名传递给函数,该函数将使用ajax运行php脚本并返回结果。
我希望此结果在回调中返回,并继续处理。
我添加了警告,显示了我希望它们触发的顺序(1,2,3),但它们按不同的顺序触发(1,3,2)
请帮忙。
function Test() {
FileExists("Faces.png", function() {
alert("3");
});
}
function FileExists(Filename, callback)
{
var res;
var Obj = new Object();
Obj.function = 'FileExists';
Obj.Filename = Filename;
alert("1");
$.ajax({
url: "upload.php",
dataType: "text",
type: "POST",
data: Obj,
cache: false,
success: function (data) {
alert("2");
if (data == "1")
res = true;
else
res = false;
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
res= false;
}
});
if(callback) callback(res);
}
答案 0 :(得分:3)
您的回调需要在成功和错误函数中执行:
//Initialize callback with an empty function if not provided
callback = callback || function() {};
$.ajax({
url: "upload.php",
dataType: "text",
type: "POST",
data: Obj,
cache: false,
success: function (data) {
alert("2");
if (data == "1")
callback(true);
else
callback(false);
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
callback(false);
}
});
目前执行的方式如下:
FileExists
被召唤。alert(1)
被召唤。$.ajax
将立即返回,但请求排队,最终由浏览器执行。callback
,如果它存在,则使用res
调用它,此时未定义。