2014-05-19 82 views
1

我想从PHP循环返回数组。但jQuery的.length是给我:jQuery Ajax成功返回数组长度?

'undefined' 

PHP:

$items = array(); 
$items["country"] = "North Korea", 
$items["fruits"] = array(
         "apple"=>1.0, 
         "banana"=>1.2, 
         "cranberry"=>2.0, 
        ); 
echo json_encode($fruits); 

的jQuery:

$.ajax({ 
    url: "items.php", 
    async: false, 
    type: "POST", 
    dataType: "JSON", 
    data: { "command" : "getItems" } 
}).success(function(response) { 
    alert(response.fruits.apple); 
    alert(response.length); 
}); 
  • 这里的第一个警报()是确定的,通过返回:"1.0"
  • 则第二警报()来检测长度response.length正在返回:
    • undefined

那么如何才能i循环此阵列(或)如何循环果实(由PHP等定义$items["fruits"])从jQuery结束了吗?

+0

因为'response'是一个对象,而不是一个数组,所以它在现代浏览器中没有'length'属性 –

+0

,所以可以使用'Object.keys().length'如此'Object.keys(response ).length' –

+0

尝试'alert(response.fruits.length);' – Viscocent

回答

9

只是尝试这样

事情要做到这一点的任何ES5兼容的环境,如节点,浏览器,IE 9,FF 4+或Safari 5+:

alert(Object.keys(response).length); 

代码

$.ajax({ 
    url: "items.php", 
    async: false, 
    type: "POST", 
    dataType: "JSON", 
    data: { "command" : "getItems" } 
}).success(function(response) { 
    alert(response.fruits.apple); 
    alert(Object.keys(response).length); 
}); 

REFERENCE

How to efficiently count the number of keys/properties of an object in JavaScript?

1

看起来你正在PHP端创建一个关联数组,这在JavaScript中几乎是以object的形式出现的。没有.length属性的对象。

您可以通过调用Object.keysArray.prototype.forEach或直接使用for..in循环来“循环”对象键。

这可能看起来像

Object.keys(response).forEach(function(key) { 
    console.log('key name: ', key); 
    console.log('value: ', response[key]); 
}); 
+0

那么请怎么做? –

+0

看看?:http://stackoverflow.com/questions/19907935/parse-php-array-of-objects-with-jquery-ajax – MarkP

+0

@MarkP所以解决方案是使用'JSON.parse(响应) ;'?现在我尝试了但仍然不能。 –

0

要做到这一点,你必须你的对象转换为的东西,有长度,就像这样:

var length = Object.keys(response).length 

注意这不是一个完整的解决方案因为它在IE8中不起作用。

另一种解决方案是增加一个“计数”指数在PHP中的JSON对象,然后读取值在您的JS像这样:

$items["fruit_count"] = count($fruits); 
-1

对于每个给出的代码示例中,要分配阵列$项[ “水果”]变量和encodeing $水果变量。请编码$ items [“fruits”]变量并检查您的编码。更改变量后,对我来说工作正常。

谢谢,基于您的代码

0

你可以使用这个通过按键

for(var fruitName in response.fruits) 
    alert(fruitName + " => " + response.fruits[fruitName])) 

但是如果你想要像一个普通的数组循环迭代,我建议你的PHP水果对象必须修改为类似下面的

$items["fruits2"] = array(
       array("name" => "apple", "value"=>1.0), 
       array("name" => "banana", "value"=>1.2), 
       array("name" => "cranberry", "value"=>2.0), 
      ); 

但随后你的Javascript将不得不改变以下

alert(response.fruits2[0].value); 
for(var i = 0; i < response.fruits2.length; i++) 
    alert(response.fruits2[i].name + " => " + response.fruits2[i].value);