콜백을 사용하거나 자신의 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
});
}
사용법 :
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);
});
여기
ROIFileExists(function(exists) {
console.log("Exists? " + exists);
});
가 Promise
접근 방식 여기
는 콜백 접근법
난 강력하게 async: false
를 사용 하지을 제안합니다. 통화 도중 브라우저의 UI가 잠겨 사용자 경험이 좋지 않습니다. jQuery의 향후 버전에서 사라질 것입니다 (직접 XMLHttpRequest
을 사용해야합니다). 비슷한 필요성을 가지고 있지만 JSONP를 사용할 때는 async: false
을 사용할 수 없습니다.
브라우저의 JavaScript 코드는 어쨌든 이벤트 중심적이므로 이벤트 중심 특성 (이 경우 파일에 대한 정보를 얻는 이벤트)을 사용하는 것이 일반적입니다.
+1 나는'$ .Deferred' 객체에 대해 알지 못했다. – Scott
@ Scott : 네. 언뜻보기에, 그들은 단지 합병증을 추가하는 것처럼 보입니다 (적어도 그것은 첫 반응이었습니다). 그러나 그때 당신이 그들을 결합하기 시작하면, 한 번에 한 가지 이상을 기다리는 것, 그들은 꽤 차가워지기 시작합니다. :-) –
콜백 방식이 효과적입니다! 매우 감사합니다! 나는 약속의 접근 방식을 좋아한다. 다시 한 번 감사드립니다! – OtagoHarbour