2009-11-17 111 views
1

我沮喪地抓我的頭,但我找不到答案。 我是新來的Ajax,我想這個簡單的腳本:問題解析XML輸出(PHP/JQuery)

這裏是我的代碼:

JAVASCRIPT:

$(document).ready(function(){  
    $("#toggle_album").click(function() { 
     $.post('backend/load_album_thumbnails.php', { 
      text: 'my string', 
       number: 23 
     }, function(xml) { 
       var timestamp = $(xml).find("time").text(); 
       alert(xml); 
       alert(timestamp); 
     }); 
    }); 
}); 

警報(XML)返回:

 <? xml version="1.0"?> 
<response status="ok"> 
<time>23:33:13</time> 
<string>my string</string> 
</response> 

警報(時間戳)返回空

我也試過了:

timestamp = $(「time」,xml).text();

具有相同的結果。

我在xml開始標記中添加了額外的空間,因爲它在這裏在stackoverflow上消失了。我能想到的唯一原因是返回的數據不是XML格式,但我無法弄清楚爲什麼會出現這種情況。

欣賞任何答案。

+0

我剛剛嘗試過你的逐字示例代碼,它的工作原理沒有問題。 我也嘗試在XML文件中發回錯誤的內容類型,並在開頭添加隨機空格,但它仍能無縫工作。你可以添加更多的上下文信息(例如使用的服務器,使用的瀏覽器等),也可能是您正在使用的xml文件的鏈接? – Patonza 2009-11-17 22:50:58

+0

如果你在Firefox 3.5+中測試這個代碼,它將起作用。但是,它會在IE8中失敗。 – 2009-11-17 23:22:01

+0

我總是忘記在IE中測試東西。出於好奇,你是否在其他瀏覽器上測試過這些代碼? – Patonza 2009-11-17 23:33:48

回答

1

你是對的,它不工作的原因是返回數據不是XML格式。通常,如果Web服務器不返回Content-Type標頭,那麼某些瀏覽器(因此jQuery)不會打擾解析XML。

爲了得到它的工作,你的選擇是:

  1. 修改您的響應報頭使用PHP's header() function指定XML格式,然後,改變你的迴應,以便它使用格式良好的XML。做到這一點的代碼看起來是這樣的:

     
    header('Content-Type: text/xml; charset=UTF-8'); 
    echo "<?xml version=\"1.0\"?> 
    <response status="ok"> 
        <time>$timestamp</time> 
        <string>$mystring</string> 
    </response>"; 
    
  2. 改變你處理你的JavaScript代碼的響應的方式(例如,寫一個簡單的正則表達式解析器,雖然this is considered bad for your health

  3. 更改您的回覆類似於JSON,以便您可以使用jQuery's $.getJSON() method發送請求並將響應解析爲JavaScript對象(PHP has some very nice built-in JSON functions)。
+0

我建議也移動到JSON,編碼解析更容易。 – Patonza 2009-11-17 23:34:54

+0

1)。將盡快嘗試! 2)。大聲笑! 3)。是的,我認爲JSON,但腳本將最終返回一大堆圖像信息,這使得XML格式非常理想。 – Mattis 2009-11-18 07:24:17