[英]Callback with javascript and jquery
我更像是一個java開發人員,並且在使用javascript回調時遇到了困難。 我想知道這里是否有專家會幫助我擺脫這段代碼的困難。
我試圖從db中拉出我們的位置並填充數組。 在第一次加載時,我試圖刷新所有位置,我無法控制執行流和加載值。 下面是代碼,我最后輸入了輸出。
JQUERY CODE:
// load all locations on first load.
refreshLocations();
$("#locInput").autocomplete({source: locationData});
}); // end of document.ready
// function to refresh all locations.
function refreshLocations() {
getLocationArray(function(){
console.log("firing after getting location array");
});
}
// function to get the required array of locations.
function getLocationArray() {
getJsonValues("GET", "getLocalityData.php", "", getLocalityFromJson);
}
// function to pick up localities from json.
function getLocalityFromJson(json){
if (!json) {
console.log("====> JSON IS NOT DEFINED !! <====");
return;
} else {
console.log("json is defined so processing...");
var i = 0;
$.each(json.listinginfo, function() {
var loc = json.listinginfo[i].locality;
locationArray[i] = loc;
console.log("added location ->" + locationArray[i]);
i++;
});
}
//return locationArray;
}
// function to get raw json from db.
function getJsonValues(type, url, query, getLocalityFromJson) {
var json;
// if the previous request is still pending abort.
if (req !== null)
req.abort();
var searchString = "";
if (query !== "") {
searchString = "searchStr" + query;
}
console.log("searchString : (" + query + ")");
req = $.ajax({
type: type,
url: url,
data: searchString,
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function(result) {
json = JSON.parse(result);
console.log("========start of json
return============");
console.log(JSON.stringify(json));
console.log("========end of json
return============");
//return json;
}
});
getLocalityFromJson(json);
return json;
}
上面代碼的輸出如下:
searchString : () (18:25:36:473)
at locality1.php:74
====> JSON IS NOT DEFINED !! <==== (18:25:36:518)
at locality1.php:48
========start of json return============ (18:25:37:606)
at locality1.php:83
{"listinginfo":[{"listing":"1","locality":"birmingham"},
{"listing":"2","locality":"oxford"}]} (18:25:37:624)
at locality1.php:84
========end of json return============ (18:25:37:642)
at locality1.php:85
>
將非常感謝幫助。
調用getLocalityFromJson(json);
在你成功的回調中
function getJsonValues(type, url, query, getLocalityFromJson) {
var json;
// if the previous request is still pending abort.
if (req !== null)
req.abort();
var searchString = "";
if (query !== "") {
searchString = "searchStr" + query;
}
console.log("searchString : (" + query + ")");
req = $.ajax({
type: type,
url: url,
data: searchString,
contentType: "application/json; charset=utf-8",
dataType: "text",
success: function(result) {
json = JSON.parse(result);
console.log("========start of json return============");
console.log(JSON.stringify(json));
console.log("========end of json return============");
//return json;
getLocalityFromJson(json);
}
});
}
你需要調用getLocalityFromJson(json)並在你的ajax成功函數中返回json。 Ajax請求是異步的,不能保證在到達getLocalityFromJson(json)行時請求將完成; 返回(JSON); 他們目前在哪里。
來自jquery ajax調用的回調函數是完成,失敗,成功等。成功在請求成功后調用,如果有類似錯誤500,或404或w / e,則調用Failure。 完成總是在ajax調用后調用。
如果你希望你的代碼像java中那樣遵循序列,請將async: false
拋入你的ajax調用中......但是我不推薦這樣做,因為它違背了使用這種方法的目的,並且還鎖定了你的瀏覽器。
在繼續之前,您應確保等待請求完成 - 因此,在請求完成獲取數據之后,將代碼放入要運行的成功函數中。
我認為您需要記住Ajax正在運行異步,因此您需要按照此線程執行刷新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.