Javascript getJSON返回到数组变量&;json数组操作
Javascript getJSON返回到数组变量&;json数组操作,javascript,jquery,arrays,json,getjson,Javascript,Jquery,Arrays,Json,Getjson,有没有办法将$.getJSON返回到变量数组中? 我知道它是异步的,超出了范围,但我将在ajax回调中使用它,我只需要首先获取所有值,然后对照另一个数组检查它们 比如: $.getJSON('itemManager.php?a=getItems', function(data){ // itemArray = new Array(data); // idsArray = new Array(data.id); for (var i in someOtherArray){
有没有办法将$.getJSON返回到变量数组中?
我知道它是异步的,超出了范围,但我将在ajax回调中使用它,我只需要首先获取所有值,然后对照另一个数组检查它们 比如:
$.getJSON('itemManager.php?a=getItems', function(data){
// itemArray = new Array(data);
// idsArray = new Array(data.id);
for (var i in someOtherArray){
if($.inArray(i, idsArray) == -1){
// do something...
// get jason variable by id?
// itemArray[i].someVariable
}
}
}
编辑:JSON结构
[{"id":"786","user_id":"1","seller_id":"2","address_id":"1","time":1299852115,"publicComment":null,"personalComment":null},
{"id":"787","user_id":"1","seller_id":"2","address_id":"1","time":1299852115,"publicComment":null,"personalComment":null},
{"id":"785","user_id":"1","seller_id":"2","address_id":"1","time":1299852114,"publicComment":null,"personalComment":null},
{"id":"784","user_id":"1","seller_id":"2","address_id":"1","time":1299852113,"publicComment":null,"personalComment":null},
{"id":"783","user_id":"1","seller_id":"2","address_id":"1","time":1299852111,"publicComment":null,"personalComment":null}]
基本上就是这个想法
- 获取所有值
- 隔离JSON对象的id值
- 循环另一个数组
- 检查json id是否在另一个数组中
- 通过id值访问其他json变量
我想这里有各种各样的解决方案,但我正在寻找代码最少的解决方案。如果您得到一个数组作为JSON响应,那么回调中的
数据
变量就是一个数组,不需要对它做任何事
如果您得到一个对象作为JSON响应,如示例中的data.id
所示,并且它的一些值是一个数组,那么只需使用data.id
作为数组,或者使用var array=data.id代码>如果您更方便的话
记住,回调中的数据
就是JSON。它可以是对象(关联数组)、数组、字符串、数字或真、假或空值。如果它是一个对象,您可以使用data.key
访问它,如果它是一个数组,您可以使用data[index]
访问它。我之所以这么说,是因为我怀疑您可能把数组和对象混淆了。根据给定的信息,没有快捷方式来测试ID的存在。你真的得把一切都绕过去。但是,您可以通过创建id=>object
映射来改进:
$.getJSON('itemManager.php?a=getItems', function(data){
var items = {};
for(var i = data.length; i--; ) {
items[data[i].id] = data[i];
}
for (var j = someOtherArray.length; j--; ){
var item = items[someOtherArray[j]];
if(item){
// do something with `item`
}
}
}
如果您已经在服务器上创建了此结构,那么会更好,它将是:
$.getJSON('itemManager.php?a=getItems', function(data){
for (var j = someOtherArray.length; j--; ){
var item = data[someOtherArray[j]];
if(item){
// do something with `item`
}
}
}
您还应该考虑哪些数组将包含更多的元素,<代码>数据< /代码>或<代码>其他数组< /代码>,并调整数据结构,以便只在较小的数组上循环。
更新:
要使用PHP在服务器上创建适当的结构,必须创建关联数组
因此,在向数组添加对象时,不应执行以下操作:
$items[] = $obj;
但是
我不明白你的问题。你试过什么吗?当然,您可以将响应存储在任何需要的地方,并且可以访问上限范围中的任何变量。您只需确保数组的结构是正确的(例如,idsArray=newarray(data.id)
看起来不正确)。我只是在寻找一种最简单的代码方法。我很少使用jquery,也不熟悉所有的代码片段。只是尽量避免一切循环和添加/检查values@ZolaKt:那么someOtherArray
中的数组是什么样子的,数据的值是什么?如果我们不知道结构,我们就无法告诉您如何访问它。这与jQuery完全无关,只是基本的JavaScript。@ZolaKt:但什么是数据
?它是单个对象还是对象数组?为什么不直接发布结构,让它更容易。@ZolaKt:显示一些JSON示例,以及其他数组或任何您想使用的内容的示例,并告诉我们您到底想用它做什么。不清楚你想做什么,用什么做。好的,很好。有没有关于如何只获取id密钥而不使用$。每个密钥循环所有内容的建议-value@ZolaKt:如果您展示了一些需要遍历的示例JSON数据,那么就容易多了。jQuery.parseJSON会处理映射吗?@ZolaKt:不会。如果您的JSON是[{…},{…}]
,那么无论发生什么情况,您都会得到一个JavaScript数组。您必须将JSON创建为{id1:{…},id2:{…}
,然后您将获得一个JavaScript对象(这将是映射)jQuery.parseJSON
只是解析JSON以传递到JavaScript数据结构中,这已经通过使用getJSON
完成了。有关如何调整服务器返回的建议?在php中,我使用json_encode($items)hmmm返回/回显一个自定义对象数组,但没有那么简单。它是一个基于对象的整体oop结构,而不是关联数组,所以我想我只需要保留额外的循环并使用第一个示例。thanks@ZolaKt:不客气。完整性:在传递json\u encode
数组之前,您还可以迭代$items
数组,并使用此结构创建一个新数组。我只是想避免数据重复两次。。。
$items[$obj->id] = $obj; // or $obj['id'] if you have an array