async が false に設定された Ajax 関数で XML ファイルから画像の URL を読み取っているため、Ajax 関数が完了するまで待機する必要があります。これらの URL を受信している間、URL に有効な画像があるかどうかを検証するために別の関数を呼び出しており、コールバック関数 "isUrlIsImage()" からブール値を受け取ります... しかし、Ajax がコールバック関数からすべての結果を受信するのを待っていないことを発見しました...誰がどこを見るべきか知っていますか??? すべてのコールバック関数を待機するように Ajax を強制するにはどうすればよいですか... よろしくお願いします...
$.fn.initializeImg = function (CP_ID) {
var selected_dataType = "";
if (currentBrowser().browser == "IE" && currentBrowser().version < 10) {
selected_dataType = "text";
}
else {
selected_dataType = "xml";
}
$.ajax({
type: "GET",
url: "XML_file.xml",
dataType: selected_dataType,
async:false,
success: function (xml) {
var processedXML_01 = parseXml(xml);
$(processedXML_01).find('property').each(function () {
var j_propertyIn_List = $(this).find('propcode').text();
if (j_propertyIn_List == gb_var.j_propcode) {
$(this).find('photo').each(function (index) {
gb_var.j_propertyImgURLs[index] = $(this).find('urlname');
console.log(">>>> "+gb_var.j_propertyImgURLs[index].text());
isUrlIsImage(gb_var.j_propertyImgURLs[index].text(), function (_url, result) {
//alert("check result >> "+result + " for " + _url);
if (result) {
console.log("******TRUE********* check result >> " + result + " for " + _url);
}
else {
console.log("******FALSE********* check result >> " + result + " for " + _url);
}
});
});
}
});
},
error: function () {
alert("An error occurred while processing XML file.");
}
});
} //end plugin function
})(jQuery);
function isUrlIsImage(given_url, callback) {
console.log(" checking............. " + given_url);
url = given_url;
$("<img>", {
src: url,
error: function () { callback(url, false); },
load: function () { callback(url, true); }
});
}