Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getJSON返回到数组变量&;json数组操作_Javascript_Jquery_Arrays_Json_Getjson - Fatal编程技术网

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