使用回调,或您自己的Promise
.
这是回调方法:
function ROIFileExists(callback){
// --------------------^ Accept the function to call back as an arg
jQuery.ajax({
type: "POST",
url: "ROIFileExists.php",
data: { FileName: fileName},
cache: false
}).done(function( result ) {
var fileAlreadyExists = (result!==0);
console.log('fileAlreadyExists='+fileAlreadyExists);
callback(fileAlreadyExists);
// ---------^ Call it
});
}
用法:
ROIFileExists(function(exists) {
console.log("Exists? " + exists);
});
这是Promise
方法:
function ROIFileExists(){
var d = new $.Deferred(); // Create the deferred object
jQuery.ajax({
type: "POST",
url: "ROIFileExists.php",
data: { FileName: fileName},
cache: false
}).done(function( result ) {
var fileAlreadyExists = (result!==0);
console.log('fileAlreadyExists='+fileAlreadyExists);
d.resolve(fileAlreadyExists); // <=== Resolve it
});
return d; // <=== Return it
}
用法:
ROIFileExists().done(function(exists) {
console.log("Exists? " + exists);
});
我强烈建议不要使用async: false
. 导致用户体验差,通话时卡住浏览器的UI;它会在 jQuery 的未来版本中消失(你必须XMLHttpRequest
自己使用);async: false
如果您有类似的需求,但是当您使用 JSONP 时,您将无法使用。
浏览器上的 JavaScript 代码无论如何都是事件驱动的,因此接受事件驱动的本质(在这种情况下,事件是您获取有关文件的信息)通常是要走的路。