好的,在搜索堆栈溢出以寻找答案之后,我找到了两个线程,并同时尝试了这两个线程,但是它们对我没有作用。
Assign data from jQuery getJSON to array
How to get JSON array from file with getJSON?
我的问题是,我想为映射实用程序处理数据库中的一些数据,但是在调用Jquery方法$.getJSON()之后,JSON的一些元素就会出现。我可以把它们创建成一个“ul”元素。我无法让他们用我尝试过的任何方法将数组推入数组中。我在这里问,因为我好奇我做错了什么。我曾经想过,我可能需要遍历DOM才能使元素一旦被填充,也许,这对我来说是很愚蠢的,我想知道是否有一种更简单的方法。我是javascript和Jquery的新手,但我了解编程概念。
我使用的概念如下:
完成瓶颈所在的HTML代码。基本上,PHP将返回数据,如步骤1所示,但作为JSON对象除外。这是一个简单的例子,让我先超越概念的证明。我可以显式地推送到数组,也可以生成ul元素的子项。我根本无法从“getJSON”中推送条目,无论我试图从我所阅读的内容中改革getJSON方法。
<html>
<head>
<script type='text/javascript' src='JQuery 2.0.3.js'></script>
</head>
<body>
<ul></ul>
<script>
test = [
{
PlaceID: "1",
PlaceName: "Somewhere"
}
]
test.push({PlaceID: "2", PlaceName: "SomewhereElse"});
function getArray() {
return $.getJSON('SqlTalk.php')
}
getArray().done(function(json){
$.each(json, function(key, val){
//test[key] = { PlaceID: val.PlaceID}; // doesn't work
test.push({PlaceID: val.PlaceID, PlaceName: val.PlaceName}); // also does not work, can't push.
$('ul').append('<li id="' + key + '">' + val.PlaceName + '</li>');
});
});
alert(test.length);
// So I get my output to the 'ul' element fine, but my test array never gets the values.
//I have tried what others have stated and it does not work.
</script>
</body>
</html>发布于 2013-08-23 19:25:10
在请求完成后才会更新全局。
var getArrayPromise = getArray().done(function(json){
$.each(json, function(key, val){
//test[key] = { PlaceID: val.PlaceID}; // doesn't work
test.push({PlaceID: val.PlaceID, PlaceName: val.PlaceName}); // also does not work, can't push.
$('ul').append('<li id="' + key + '">' + val.PlaceName + '</li>');
});
});
getArrayPromise.done(function(){
alert(test.length);
});没有解决办法,这就是异步请求的工作方式。当接收到请求时,时钟一直在滴答作响,代码继续执行。
发布于 2013-08-23 20:39:12
您可能希望对AJAX响应使用complete回调。
$.ajax({
url: 'SqlTalk.php',
dataType: 'json',
success: function(data){
for (var i = 0; i < data.length; i++) {
test.push({PlaceID: data[i].PlaceID, PlaceName: data[i].PlaceName});
$('ul').append('<li id="' + i + '">' + data[i].PlaceName + '</li>');
}
},
complete: function(){
console.log(test);
}
});我做了一个快速的jsfiddle ( http://jsfiddle.net/Ar7kX/ )来显示执行中的完全回调(使用另一种数据和方法,因为我显然无法访问您的真实数据: ),这是一个更合适的数组,需要在几分钟内跟随数组(如果我知道如何从jsfiddle收集四方数据)
编辑
在这里,您可以看到一个数组直接从http://jsfiddle.net/f38F3/1/ (30个项)中提取,希望这反映了从php脚本中提取数据的相同情况。
https://stackoverflow.com/questions/18409904
复制相似问题