json_encode从Javascript返回undefined

时间:2014-06-17 02:32:43

标签: javascript php jquery

我有一个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);
}

我做错了吗?

2 个答案:

答案 0 :(得分:1)

您的数组不能用作数组,它是一个对象。 JavaScript中的对象没有长度属性(当然,除非你创建一个)。

无论创建PHP数组是什么,看起来它都使用字符串作为索引。确保它们是真正的整数。在PHP中,这很好,因为PHP具有关联数组的概念。当编码为JSON以在JavaScript中使用时,这将成为对象文字。

重申一下,你不想要这个:

{"1":"1401880321163321491.png", // ...

你想要这个:

["1401880321163321491.png", // ...

只有当PHP数组中的数组索引是数字1而不是字符串"1"时,才可能这样做。您可能也遇到了问题,因为您的数组是&#34;稀疏&#34;,无法使用正常的数组文字进行复制。你不能跳过数组文字中的索引。

答案 1 :(得分:0)

这是一个Javascript对象,而不是一个数组,因此它没有长度属性。它也是无序的。

尝试alert(photosArray['11'])查看结果。