为什么我的php json从我的jquery中获取未定义的类型错误?

时间:2012-10-01 09:23:17

标签: php jquery json

我不知道出了什么问题,我只是遗漏了一些东西,所有我期望的数据都是基于firebug'控制台选项卡成功接收的,问题是显示数据。

这是我的jquery代码:

success: function(data){
            var toAppend = '';
            if(typeof data === "object"){
                for(var i=0;i<data.length;i++){
                    toAppend += '<tr><td colspan="2">'+data[i]['main-asin'][0]+'</td></tr>';
                    toAppend += '<tr><td>'+data[i]['sub-asin'][0]+'</td><td></td></tr>';
                }
                $('.data-results').append(toAppend);
            }
        }

这是我的PHP代码:

    foreach($xml->Items->Item as $item){
    $items_from_amazon[] = array('main-asin'=>$item->ASIN);
    foreach($xml->Items->Item->Variations->Item as $item){
        $items_from_amazon[] = array('sub-asin'=>$item->ASIN);
    }
}

echo json_encode($items_from_amazon); //return amazon products

这是我的萤火虫的结果: enter image description here

1 个答案:

答案 0 :(得分:2)

$items_from_amazon数组的每个元素都是一个带有单个键的关联数组,即main-asinsub-asin。因此data数组的第一个元素将设置main-asin属性,但不会sub-asin;所有其他人只有sub-asin,但没有main-asin

修复它的一种方法是更新代码:

toAppend += '<tr><td colspan="2">'+data[0]['main-asin'][0]+'</td></tr>';
for(var i = 1; i<data.length; i++){
  toAppend += '<tr><td>'+data[i]['sub-asin'][0]+'</td><td></td></tr>';
}

...但也许最好改变BOTH响应和处理代码的结构:

PHP:

foreach($xml->Items->Item as $item){
  $new_item_from_amazon = array(
    'main-asin' => $item->ASIN,
    'sub-asin'  => array(),
  ); 
  foreach($xml->Items->Item->Variations->Item as $item) {
    $new_item_from_amazon['sub_asin'][] = $item->ASIN;
  }
  $items_from_amazon[] = $new_item_from_amazon;
}

JS:

toAppend += '<tr><td colspan="2">'+data['main-asin']+'</td></tr>';
for (var i = 0, l = data['sub-asin'].length; i < l; i++){
  toAppend += '<tr><td>'+data['sub-asin'][i]+'</td><td></td></tr>';
}

我在此处为空sub-asin值指定了一个空数组,以避免在JS中进行额外的检查data['sub-asin']