2013-07-18 76 views
0

我正在使用JQuery檢索XML文件。 XML文件是基於通過JQuery傳遞給它的參數動態生成的(PHP)。例如,我要求提供三個ID的信息(在本例中爲0ZJB001,5YH043,9TQ987)。返回的XML文件包含請求的ID和找到的項目的列表。然後根據這些值更改跨度內容。我有這個工作很好,除了少於項目返回比請求。因此,如果請求三個項目並且只返回兩個項目,那麼JQuery每個語句只執行兩次。相反,我需要它爲每個ItemId執行並從相應的ASIN項目中檢索細節,或者以其他方式更新一些默認細節。處理XML文件的問題

示例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 
    } 
} 

回答

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 
     } 
    }) 
} 
+0

謝謝你,阿倫。通過一些修改它的工作。我所做的更改是針對return語句的「$(itemId).text()」,例如$(xml).find。我不知道這是由於我的功能是什麼或什麼(我通常使用PHP)。無論如何,謝謝你的迴應。 – Paul