我正在使用.getJSON将搜索查询发送到我的PHP服务器并返回一个已经json_encode'd的数组。我想在jQuery函数完成后使用结果对象(理想情况下,将其推入数组,并像使用页面中其他任何对象一样使用它。
但是,在函数完成后对象不再存在。这是成功的:
var widgets = new Array();
$.getJSON('/server.php', {query: search.value}, function(response) {
widgets.push(response);
alert('value of result's attribute1 is ' + widgets[widgets.length].attribute1);
});
然而,一旦我离开函数,widgets.push [length]就变为null,我无法访问有关push'ed对象的任何内容。我认为这将是一个副本,而不是一个参考?
我的应用程序涉及用户执行其中一些搜索以创建窗口小部件列表,然后在每个对象的属性之间工作。在函数完成后是否有可接受的方法使这些数据持久化?
答案 0 :(得分:1)
我认为您正在检查数组的错误索引。
widgets[widgets.length - 1]
可能是其他事情......但这可能是它。
答案 1 :(得分:0)
getJSON调用是异步发生的,或者与JavaScript的其余部分无关。您的问题很可能是因为在您尝试操作窗口小部件数组之前未完成getJSON调用。
您需要确保在getJSON完成后对小部件进行任何操作。
getJSON语法的一部分允许您在调用成功时添加回调函数。见http://api.jquery.com/jQuery.getJSON/。将您的所有小部件maniuplation代码放入“成功”。
答案 2 :(得分:0)
构建一个'小'小部件,需要将jsonP结果(小部件内容)加载到小部件容器中....
这对我有用......啊 - 啊,啊 - 二,啊 - 三和四......
全局“数组”变量
var widgetContents = [];
json请求....
$.getJSON(jsonp_url, function(results) {
$.each(results, function(i, value) {
widgetContents[i] = value;
// console.log( i + " => " + value);
});
var success = true;
});
调试或发现问题...
if ( widgetContents.length == 0 || success != true ) {
alert("Opps... something went wrong in the backroom....");
}
处理结果......
else {
$.each(widgetContents, function(index, value) {
$('#' + contentsID).append(value);
/* or whatever you need to do.... */
});
}