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条)

报告相同问题?

悬赏问题

  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则