douwen3836 2016-04-20 11:18
浏览 40
已采纳

未捕获的TypeError:不能在jquery / json中使用'in'运算符

I create a json in php like this:

$details= array();
$ret = array();

for($i=0;$i<3;$i++) { $details["name"] = "name".$i;  $ret[] = $details;}

And then return it to a jquery ajax:

echo json_encode($ret,JSON_UNESCAPED_UNICODE);
die();

In jQuery ajax:

$.ajax({
    url: "index2.php?id=upload",
    type: "POST",
    data:  new FormData($("#form")[0]),
    contentType: false,
    cache: false,
    processData:false,
    returnType:"json",
    success: function(data)
    {
        console.log('names:'+JSON.stringify(data));
        $.each(data, function(i) 
        { 
            console.log('name:'+data[i]['name']);
         }
    },

first console log prints,but second: I get this error:

jquery-2.2.3.min.js:2 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in [{"name":"name1"},{"name":"name2"},{"name":"name3"}]

Also I try

$.each(JSON.parse(data), function(i) 
                { ..}

but I print empty:

name:undefined

  • 写回答

2条回答 默认 最新

  • douceng7070 2016-04-20 11:36
    关注

    When the javascript converts your json string into a javascript data type it will be an array of objects like this

    Array
    (
        [0] => stdClass Object
            (
                [name] => name0
            )
    
        [1] => stdClass Object
            (
                [name] => name1
            )
    
        [2] => stdClass Object
            (
                [name] => name2
            )
    
    )
    

    So your javascript should be

    Also returnType:"json" should be dateType:"json" as far as I know there is not such parameter as returnType:

       $.ajax({
            url: "index2.php?id=upload",
            type: "POST",
            data:  new FormData($("#form")[0]),
            contentType: false,
            cache: false,
            processData:false,
            dateType:"json",
            success: function(data)
            {
                console.log('names:'+JSON.stringify(data));
                $.each(data, function(i,v) 
                { 
                    console.log('name:'+v.name);
                }
            },
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看