我正在编写一个函数,它将连接到服务器并检索JSON对象。它将处理它并返回一个普通数组,其值包含在某些HTML标记中。我知道可以使用其他方式完成,但我使用以下代码。
var names = new Array();
function fetch (key) {
var url = 'server/server.php?key=' + key
$.getJSON(url , sett = function(data) {
$.each(data, function(key, value){
names[key] = value['name'];
});
console.log(names);//works and print the values
});
console.log(names);//doesn't work, shows and empty array
}
我想返回一个数组,它将保存每个jQuery过滤的值,因此该函数可以作为任何大型应用程序的标准函数。怎么做?
答案 0 :(得分:1)
如评论中所述,您的ajax请求将花费一些时间(时间很短,但仍然是时间),因此位于ajax调用之外的console.log
将在ajax调用完成之前执行,显示原始的,空阵列。
您可以向fetch
功能添加回调参数...
所以...
function fetch (key, callback) {
var url = 'server/server.php?key=' + key
$.getJSON(url , sett = function(data) {
$.each(data, function(key, value){
names[key] = value['name'];
});
// call callback inside the getJSON callback
callback && callback.call(this, names);
});
}
现在,您的回调函数将names
数组作为参数1。
fetch(some_key, function(names){
console.log(names); //should work!
});
答案 1 :(得分:0)
我首先尝试将数组元素添加到数组中。
names.push(value['name']);
如果你想要更多的字典方法(你似乎这样做)试试这个。
JavaScript dictionary with names
此外,在阅读其他评论并考虑更多...之后,您可能希望将遍布结果的代码移动到“成功”回调中。
祝你好运!答案 2 :(得分:0)
我还没有测试过这个。但以下情况应该有效:
var names = new Array();
function fetch (key) {
var url = 'server/server.php?key=' + key
$.ajax({
url: url,
type: "get",
success: function(data) {
$.each(data, function(key, value) {
names[key] = value['name'];
});
console.log(names); // this should still work
},
dataType: "json",
async: false
});
console.log(names); // this should now work
}
但是,你真的应该试图远离同步请求。