jQuery Ajax成功返回数组长度
jQuery Ajax Success get returned Array Length?
我正在尝试从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 );
});
- 这里的第一个警报()是ok的,通过返回:
"1.0"
。 - 则第二个警报()检测长度
response.length
返回:-
undefined
-
那么我怎么能循环这个数组(或)如何循环水果(由PHP定义的$items["fruits"]
)从jQuery结束请?
试试这样
在任何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);
});
参考如何有效地计算在JavaScript对象的键/属性的数量?
看起来你在PHP端创建了一个关联数组,这在JavaScript中很像object
。对象没有.length
属性。
您可以通过调用Object.keys
和Array.prototype.forEach
或直接使用for..in
循环来"循环"对象键。
可以是
Object.keys( response ).forEach(function( key ) {
console.log('key name: ', key);
console.log('value: ', response[key]);
});
要做到这一点,你必须将你的对象转换为有长度的东西,像这样:
var length = Object.keys(response).length
注意,这不是一个完整的解决方案,因为它不能在IE8中工作。
另一个解决方案是在PHP中为JSON对象添加一个"count"索引,然后在JS中读取该值,如下所示:
$items["fruit_count"] = count( $fruits );
根据您的代码,您可以使用它来遍历键
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);
将响应转换为数组优先
var data = Object.keys(response).map(function(_) { return response[_]; });
然后访问数据长度
data.length
根据给定的代码示例,您正在将数组分配给$items["fruits"]变量并编码$fruits变量。请对$items["fruits"]变量进行编码,并核对您的编码。在改变变量后,它的工作对我来说很好。
谢谢,
相关文章:
- 对象数组返回自最近日期以来的最高总体值
- 从多维数组返回嵌套数组
- 为什么当我点击<a>使用纯javascript;这个“;返回url,数组返回“url”;未定义”;
- 带多维数组返回字符串的json_encode;阵列”;而不是数据
- 如何将 AJAX 响应作为 JavaScript 数组返回
- 我正在尝试在 JS 中制作这个随机名称生成器.数组返回未定义
- .push() 多个对象进入 JavaScript 数组返回 'undefined'
- 如何按属性从可观察数组返回项
- 通过jquery发送的关联php数组返回[对象对象]
- 从 Javascript 中的对象数组返回单个属性的数组
- 循环遍历对象数组返回“未定义”
- 拼接数组返回空的序列
- Javascript 多维数组返回第一个值,然后失败
- Json 数组返回空值
- 从下划线.js中的数组返回一系列值
- for 语句不从数组返回值
- MongoDB从数组返回特定字段
- 试图将数组返回到表中的列表中
- Javascript中的二维数组返回未定义的数组
- 将函数数组作为布尔值数组返回