0

JQuery を使用して XML ファイルを取得しています。XML ファイルは、JQuery で渡されたパラメーターに基づいて動的に生成されます (PHP)。たとえば、3 つの ID (この例では 0ZJB001、5YH043、9TQ987) に関する情報を要求します。返された XML ファイルには、要求された ID と見つかった項目のリストが含まれています。次に、これらの値に応じてスパンの内容を変更しています。要求されたよりも少ないアイテムが返される場合を除いて、これは正常に機能しています。したがって、3 つのアイテムが要求され、2 つだけが返された場合、JQuery each ステートメントは 2 回だけ実行されます。代わりに、ItemId ごとに実行し、対応する ASIN アイテムから詳細を取得するか、デフォルトの詳細で更新する必要があります。

サンプルの XML ファイル形式 (正確ではありません。簡略化されています):

<ItemLookupResponse>
    <Items>
        <Request>
            <ItemLookupRequest>
                <ItemId>0ZJB001</ItemId>
                <ItemId>5YH043</ItemId>
                <ItemId>9TQ987</ItemId>
                <VariationPage>All</VariationPage>
            </ItemLookupRequest>
        </Request>
        <Item>
            <ASIN>0ZJB001</ASIN>
            <OfferSummary>
                <TotalNew>0</TotalNew>
                <TotalUsed>0</TotalUsed>
                <TotalCollectible>0</TotalCollectible>
                <TotalRefurbished>0</TotalRefurbished>
            </OfferSummary>
        </Item>
        <Item>
            <ASIN>9TQ987</ASIN>
            <OfferSummary>
                <LowestNewPrice>
                    <Amount>1000</Amount>
                    <CurrencyCode>USD</CurrencyCode>
                    <FormattedPrice>$10.00</FormattedPrice>
                </LowestNewPrice>
                <TotalNew>1</TotalNew>
                <TotalUsed>0</TotalUsed>
                <TotalCollectible>0</TotalCollectible>
                <TotalRefurbished>0</TotalRefurbished>
            </OfferSummary>
        </Item>
    </Items>
</ItemLookupResponse>

したがって、最終結果は(「疑似コード」で)次のようになります。

foreach(Items) {
    if(exists ItemId && ASIN) {
        //update span with price
    } else {
        //update span with default text
    }
}
4

1 に答える 1

0

試す

function callback(xml){
    var itemIds = xml.find('Request ItemLookupRequest ItemId');
    var items = xml.find('Items > Item');

    itemIds.each(function(idx, itemId){
        var item = items.filter(function(idx, item){
            return $(item).children('ASIN').text() == itemId;
        });

        if(item.length){
            //update the span with item.find('FormattedPrice').text()
        } else {
            //update the span with default price
        }
    })
}
于 2013-07-18T03:53:00.217 に答える