我不知道出了什么问题,我只是遗漏了一些东西,所有我期望的数据都是基于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
这是我的萤火虫的结果:
答案 0 :(得分:2)
$items_from_amazon
数组的每个元素都是一个带有单个键的关联数组,即main-asin
或sub-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']
。