コールバックまたは独自の を使用します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 コードはイベント駆動型であるため、そのイベント駆動型の性質 (この場合、ファイルに関する情報を取得するイベント) を採用するのが通常の方法です。