jQuery Ajax 成功返回数组长度?
Posted
技术标签:
【中文标题】jQuery Ajax 成功返回数组长度?【英文标题】:jQuery Ajax Success get returned Array Length? 【发布时间】:2014-07-07 03:05:10 【问题描述】:我正在尝试循环从php
返回的数组。但是 jQuery .length
给了我:
'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 );
);
这里 First Alert() 没问题,返回:"1.0"
。
然后检测长度response.length
的第二个Alert() 返回:
undefined
那么我该如何循环这个数组(或)如何从 jQuery 端循环 Fruits(由 PHP 定义,如 $items["fruits"]
)?
【问题讨论】:
因为response
是一个对象,而不是一个数组,所以它没有length
属性
在现代浏览器中你可以使用Object.keys().length
所以Object.keys(response).length
试试alert( response.fruits.length );
【参考方案1】:
简单地尝试这样的事情
要在任何与 ES5 兼容的环境中执行此操作,例如 Node、Chrome、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);
);
参考
How to efficiently count the number of keys/properties of an object in javascript?
【讨论】:
【参考方案2】:看起来您正在那里的 PHP 端创建一个关联数组,它在 JavaScript 中几乎以 object
的形式出现。对象上没有 .length
属性。
您可以通过在 Array.prototype.forEach
旁边调用 Object.keys
或直接使用 for..in
循环来“循环”对象键。
可能看起来像
Object.keys( response ).forEach(function( key )
console.log('key name: ', key);
console.log('value: ', response[key]);
);
【讨论】:
看看?:***.com/questions/19907935/… @MarkP 所以解决方案是使用JSON.parse(response);
?现在我试过了,还是不行。【参考方案3】:
为此,您必须将对象转换为具有长度的对象,如下所示:
var length = Object.keys(response).length
请注意,这不是一个完整的解决方案,因为它在 IE8 中不起作用。
另一种解决方案是在 PHP 中为 JSON 对象添加“计数”索引,然后在 JS 中读取该值,如下所示:
$items["fruit_count"] = count( $fruits );
【讨论】:
【参考方案4】:根据您的代码,您可以使用它来遍历键
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);
【讨论】:
【参考方案5】:首先将响应转换为数组
var data = Object.keys(response).map(function(_) return response[_]; );
然后访问数据长度
data.length
【讨论】:
【参考方案6】:根据给定的代码示例,您将数组分配给 $items["fruits"] 变量并编码 $fruits 变量。请对 $items["fruits"] 变量进行编码并检查您的编码。更改变量后,它对我来说工作正常。
谢谢,
【讨论】:
以上是关于jQuery Ajax 成功返回数组长度?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery AJAX 和 PHP 数组返回 [重复]
使用 Spring MVC 从 Jquery ajax 方法返回字符串数组
使用 Ajax Jquery 将 Json 结果返回的数据数组放入 DataTable 中