我有这小段代码
JS
function insertDataIntoTable(jsonUrl, Id) {
var obj;
$.getJSON(jsonUrl, function(data){
console.log("1: "+data.elem[Id]); //outputs the correct object
obj= data.elem[Id];
console.log("2: "+obj); //still is correct
});
console.log("3: "+obj); //now it logs "undefined"
}
表示格式正确的JSON,如果没有必要,则不想发布。我希望无论如何都能帮助我。
答案 0 :(得分:2)
function insertDataIntoTable(jsonUrl, Id) {
var obj;
var callback = function(){
console.log("3: "+obj); //now it logs "undefined"
}
$.getJSON(jsonUrl, function(data){
console.log("1: "+data.elem[Id]); //outputs the correct object
obj= data.elem[Id];
console.log("2: "+obj); //still is correct
callback();
});
}
答案 1 :(得分:0)
这是因为$.getJSON
本质上是异步的。因此,调用insertDataIntoTable
方法时,它将在以下步骤中执行。
var obj;
jsonUrl
对您的$.getJSON
进行ajax调用console.log("3: "+obj);
在这里,您的obj
将是undefined
因为它尚未定义任何值$.getJSON
),其中您获得console.log("1: "+data.elem[Id]);
和console.log("2: "+obj);
绝对正确您的代码没有错。
如果要使以上代码同步,则可以通过以下方法进行:
1)使用 $.ajax
使用 async:false
function insertDataIntoTable(jsonUrl, Id) {
var obj;
$.ajax({
dataType: "json",
url: jsonUrl,
data: data,
async: false,
success: function(data) {
obj = data.elem[Id]
}
});
console.log(obj);
}
2)。如果您使用 es6
或更高,请使用 async
和 await
let insertDataIntoTable = async (jsonUrl, Id) => {
let obj;
let data = await $.getJSON(jsonUrl);
obj = data.elem[Id];
}