我有一个php数组,我json_encode并传递给javascript函数中的变量。一切看起来都不错,在Json编码之后,数组看起来像一个有效的Javascript数组,但我一直在输出上未定义。这是代码的样子:
<script src="js/jquery-1.8.1.min.js"></script>
<script>
$(function() {
getPhotos();
});
function getPhotos() {
var photosArray= <?php echo json_encode($photos_array); ?>;
alert(photosArray.length);
}
以下是浏览器中的内容:
function getPhotos() {
var photosArray= {"12":"1401880321163321491.png","11":"1401880200994911748.jpg","10":"1401866598206920573.png","6":"1401863850983364637.png","7":"14018645731921210607.png","8":"14018646851258457972.png","9":"14018647281804140101.png","13":"1401880485229593545.png","15":"1401933387756388853.jpg","16":"14019688951333867090.jpg","17":"14021062501374960169.jpg","18":"14021064801222019341.jpg","19":"14021065441073158757.png","20":"14021066841708486619.png","21":"1402106744569372168.png","22":"14022970452004604041.jpg","23":"1402297585941206466.jpg"};
alert(photosArray.length);
}
我做错了吗?
答案 0 :(得分:1)
您的数组不能用作数组,它是一个对象。 JavaScript中的对象没有长度属性(当然,除非你创建一个)。
无论创建PHP数组是什么,看起来它都使用字符串作为索引。确保它们是真正的整数。在PHP中,这很好,因为PHP具有关联数组的概念。当编码为JSON以在JavaScript中使用时,这将成为对象文字。
重申一下,你不想要这个:
{"1":"1401880321163321491.png", // ...
你想要这个:
["1401880321163321491.png", // ...
只有当PHP数组中的数组索引是数字1
而不是字符串"1"
时,才可能这样做。您可能也遇到了问题,因为您的数组是&#34;稀疏&#34;,无法使用正常的数组文字进行复制。你不能跳过数组文字中的索引。
答案 1 :(得分:0)
这是一个Javascript对象,而不是一个数组,因此它没有长度属性。它也是无序的。
尝试alert(photosArray['11'])
查看结果。