好的,所以在搜索Stack Overflow找到答案后,我找到了两个线程并尝试了它们但是它们对我不起作用。
Assign data from jQuery getJSON to array
How to get JSON array from file with getJSON?
我的问题是我想使用数据库中的一些数据来处理映射实用程序,但是在调用Jquery方法$ .getJSON()之后,JSON的某些元素会消失。我可以将它们创建为'ul'元素就好了。我无法通过我尝试过的任何方法将它们推送到数组阵列。我在这里问,因为我很好奇我做错了什么。我曾经以为我可能必须遍历DOM才能获得曾经填充过的元素,但这对我来说似乎很愚蠢,我想知道是否有更容易的方法。我是javascript和Jquery的新手但是理解编程概念。
我正在使用的概念是:
我有一个SQL Server 2008数据库,其值为:
PlaceID PlaceName
1 Place 1
2 Place 2
3 Place 3
4 Place 4
我可以使用'sqlsrv'驱动程序创建一个PHP脚本来获取值并输出
echo json_encode($data);
我可以确认我可以在本地IIS中从这个PHP脚本返回数据。 (使用所有特殊的jerry绑定,您必须对IIS进行操作,使其像PHP一样)
我可以使用
调用php脚本并使用JQuery库2.0.3.js显示它的数据$.getJSON('SqlTalk.php')
我可以使用这个填充HTML中的元素,但是我无法获得一个数组数组以便与其他对象一起使用,这正是我真正想要的。最后,我想制作一个完整的javascript,它只是从PHP脚本中获取一个数组数组,然后引用嵌入的javascript或作为用于映射的参考。然而,看起来$ .getJSON从我的阅读中看起来是不合理的,但即使是我看到的方法也不适合我试图“推”到现有的数组。可能是我在混合Jquery和传统的javascript时误解了语法。
完成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>
答案 0 :(得分:2)
在请求完成后才会更新全局。
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);
});
没有解决方法,这就是异步请求的工作方式。时钟保持滴答声,代码在收到请求时继续执行。
答案 1 :(得分:1)
您可能希望在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收集foursquare数据)
修改强>
在这里你可以看到一个直接从foursquare http://jsfiddle.net/f38F3/1/(30个项目)拉出的数组操作,希望这反映了你从php脚本中提取数据的相同情况