0
我在異步JavaScript中遇到了一些麻煩。我在jQuery AJAX調用中調用一個函數,並且在這個函數中可能還有其他異步方法調用。我暫時呆在那裏。JavaScript構建JSON異步和動態
這裏我有被jQuery AJAX函數調用的代碼片段:在這裏,我動態構建一個JSON對象。
function getJSONObjektList() {
//MainJSON
var jsonObjekt = {};
jsonObjekt.ObjektId = [];
jsonObjekt.Selected = [];
doc = XYZ.GetCurrentDocument();
//probably also an asynchrounous call
doc.GetAllObjects(function (objects) {
for (var i = 0; i < objects.length; i++) {
var obj = objects[i];
var id = obj.id;
var caption = obj.caption;
var type = obj.type;
var my = obj.my;
console.log("[obj:" + obj + " id:" + id + " caption:" + caption + " type:" + type + " my: " + my + "]");
//liste alle verfuegbaren Objekte auf
jsonObjekt.ObjektId.push(id);
if (type === "Statusbox") {
doc.GetObject(id, function() {
var statusboxInhalt = this.Data.Rows;
//inner JSON object
var utilJSONObjekt;
for (var j = 0; j < statusboxInhalt.length; j++) {
// make sure to re-initialize so we don't update the same reference
utilJSONObjekt = {};
utilJSONObjekt.SelectedObjektId;
utilJSONObjekt.SelectedObjektWerte = [];
var inhalt = statusboxInhalt[j];
console.log("Name: " + inhalt[0].text + " Wert: " + inhalt[2].text);
utilJSONObjekt.SelectedObjektId = inhalt[0].text;
var valAr = inhalt[2].text.split(",");
for (var k = 0; k < valAr.length; k++) {
utilJSONObjekt.SelectedObjektWerte.push($.trim(valAr[k]));
}
jsonObjekt.Selected.push(utilJSONObjekt);
//**till here is the jsonObject not null or empty, there are some values in there**
}
});
}
}
});
//**but on the return statment is the jsonObjekt empty**
return jsonObjekt;
}
有人提示我該如何解決我的問題,或者如何讓JavaScript最佳地異步工作。
當我調用函數getJSONObjektList(功能(jsonObjekt){ 的console.log(jsonObjekt); // 有我在這裏獲得的JSONObject ??? }); – Higune
@Higune'jsonObjekt'將在回調中可用。您只需將**的所有代碼**移回回調中即可。 – freakish
你能給我簡短的片段,我不知道你的意思,或者我怎麼能做到這一點 – Higune