如何正确使用$ .each为json数组?

时间:2014-08-31 15:40:13

标签: jquery each

美好的一天。

首先在php中创建json:

$a=0;
foreach(...){
  $a++;
  $ArrImage["$a"] = $PathToThumbnailImage;
}

return json_encode($ArrImage);

second - jquery:

       $("#form").ajaxForm({
            url:        './index.php?page=test',
            success:    function(data){
            var files = JSON.parse(data);
            console.log(files);
            //files in console.log:
            // Object {1: "./DIR/90_1409499383.jpg", 
            //         2: "./DIR/90_1409499383.jpg"} 
            $.each(data.d, function(key, value) {
                console.log('test' + key + ":" + value)
            });

            //now we get error `Uncaught TypeError: Cannot read property 'length' 
            //                  of undefined `


            }
        }).submit();

请告诉我为什么我们会收到错误以及如何正确使用$.each

4 个答案:

答案 0 :(得分:0)

当您通过Ajax创建请求时,它将使用输出的数据。

当你使用'return'时,你没有输出任何东西。

您必须将'return'更改为'echo'或'print'或其他。

答案 1 :(得分:0)

您应该将data.d替换为files
它需要一个对象或数组来迭代 from the Jquery: -

  

$。每个

: - A generic iterator function, which can be used to seamlessly iterate over both objects and arrays

因此文件是你的对象而不是数据。

$("#form").ajaxForm({
            url:        './index.php?page=test',
            success:    function(data){
            var files = JSON.parse(data);
            console.log(files);
            //files in console.log:
            // Object {1: "./DIR/90_1409499383.jpg", 
            //         2: "./DIR/90_1409499383.jpg"} 
            $.each(files, function(key, value) {
                console.log('test' + key + ":" + value)
            });



            }
        }).submit();

答案 2 :(得分:0)

我试着纠正

$("#form").ajaxForm({
    url : './index.php?page=test',
    //you miss this
    dataType : 'json',
    success : function(data){
        // your server return data not data.d
        $.each(data, function(key, value) {
            console.log('test' + key + ":" + value);
        });
    }
}).submit();

答案 3 :(得分:0)

您可以在PHP脚本中使用header('Content-Type: application/json');,这样就不必在客户端使用JSON.parse

$ArrImage = array();
foreach(...){
    $ArrImage[] = $PathToThumbnailImage;
}
header('Content-Type: application/json');
echo json_encode($ArrImage);

当您不确定返回的内容是否为JSON时,您可以写:

success: function( data ) {
    data = $.type( data ) === 'string' ? JSON.parse( data ) : data;
    $.each(data, function( key, value ) {
    .......
    });
}
....