-2

何が問題なのかわからないのは、何かが足りないだけです.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

そして、これが私のfirebugの結果です: ここに画像の説明を入力

4

1 に答える 1

2

arrayの各要素は、またはのいずれかの単一のキー$items_from_amazonを持つ連想配列です。したがって、配列の最初の要素にはプロパティ セットがありますが、そうではありません。他のすべてには のみがありますが、ありません。main-asinsub-asindatamain-asinsub-asinsub-asinmain-asin

これを修正する 1 つの方法は、次のようにコードを更新することです。

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>';
}

...しかし、おそらく、応答と処理コードの両方の構造を変更する方が良いでしょう:

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>';
}

JS でのsub-asin追加のチェックを避けるために、ここでは空の配列を値として割り当てました。data['sub-asin']

于 2012-10-01T09:29:45.237 に答える