2012-05-20 77 views
1

這是我從一個提交的Url的Web服務中得到的迴應。jQuery find()可以在Chrome和Firefox上使用,但不能使用IE

HTTP/1.1 200 OK 
Server: Apache-Coyote/1.1 
Content-Type: text/xml;charset=UTF-8 
Content-Language: en-US 
Transfer-Encoding: chunked 
Date: Sun, 20 May 2012 15:35:52 GMT 
Connection: close 

841 
<!--?xml version="1.0" encoding="UTF-8"?--> 
<doi_records> 
    <doi_record owner="10.1016" timestamp="2012-04-21 12:08:25"> 
    <crossref> 
     <journal> 
     <journal_metadata language="en"> 
      <full_title>Procedia - Social and Behavioral Sciences</full_title> 
      <abbrev_title>Procedia - Social and Behavioral Sciences</abbrev_title> 
      <issn media_type="print">18770428</issn> 
     </journal_metadata> 
     <journal_issue> 
      <publication_date media_type="print"> 
      <month>1</month> 
      <year>2011</year> 
      </publication_date> 
      <journal_volume> 
      <volume>15</volume> 
      </journal_volume> 
      <special_numbering>C</special_numbering> 
     </journal_issue> 
     <journal_article publication_type="full_text"> 
      <titles> 
      <title>The effect of teaching the cognitive and meta-cognitive strategies (self-instruction procedure) on verbal math problem-solving performance of primary school students with verbal problem- solving difficulties</title> 
      </titles> 
      <contributors> 
      <person_name contributor_role="author" sequence="first"> 
       <given_name>Narges</given_name> 
       <surname>Babakhani</surname> 
      </person_name> 
      </contributors> 
      <publication_date media_type="print"> 
      <month>1</month> 
      <year>2011</year> 
      </publication_date> 
      <pages> 
      <first_page>563</first_page> 
      <last_page>570</last_page> 
      </pages> 
      <publisher_item> 
      <item_number item_number_type="sequence-number">S1877042811003211</item_number> 
      <identifier id_type="pii">S1877042811003211</identifier> 
      </publisher_item> 
      <doi_data> 
      <doi>10.1016/j.sbspro.2011.03.142</doi> 
      <resource>http://linkinghub.elsevier.com/retrieve/pii/S1877042811003211</resource> 
      </doi_data> 
     </journal_article> 
     </journal> 
    </crossref> 
    </doi_record> 
</doi_records> 
0 

用戶輸入一個輸入的變量是一個表格,點擊一個<button>,AJAX調用觸發器和得到上述數據。那麼根據返回的xml應該完成相應的操作。 這是我在做什麼:

<script type="text/javascript"> 
... 
if ($('input:text[name=ident]').val() != "") 
{ 
    $.post("<?php echo site_url('con/met/') ?>", 
    {doi:$('input:text[name=ident]').val()}, 
    function(responseText){ parseXmlDoi(responseText)}, 
    "html" 
); 
... 
} 
</script> 

,這裏是我的parseXmlDoi功能:

function parseXmlDoi(xml) 
{ 

    $('#debug').fadeIn(); 
    $('#debug').html(''); 

    if ($(xml).find('error').text()) 
    { 
     $('#debug').html('<div dir="rtl" class=\"message warning\"><p>error</p></div>'); 
    } 
    else if ($(xml).find('book').text()) 
    { 
     $('#debug').html('<div dir="rtl" class=\"message info\"><p>this is a book</p></div>'); 
    } 
    else if ($(xml).find('journal').text()) 
    { 

     // do some stuff 

    } 
    else 
    { 
     $('#debug').html('<div dir="rtl" class=\"message error\"><p> something is wrong</p></div>'); 

    } 
} 

問題:在Chrome和Firefox基於上面的XML給出的,它的工作原理和它執行// do some stuff但IE說它something is wrong這意味着find()不起作用。

+0

題外話,但:最好不要經常叫'$()'重新解析相同的XML。調用*一次*然後重新使用結果。 'var $ xml = $(xml);'... –

+0

檢查了這一點http://stackoverflow.com/questions/562283/jquery-find-doesnt-return-data-in-ie-but-does-in- firefox-and-chrome – pna

+0

@pna:我們可以看到John發佈的內容類型。儘管'application/xml'是首選的,但仍然可以識別'text/xml'。但是,他正在重寫默認處理。 –

回答

1

您明確告訴jQuery將響應視爲HTML而不是XML,因此您返回的是字符串。然後你在該字符串上調用$(),告訴它將它解析爲而不是XML。

我看不出任何重寫默認處理的理由,但我懷疑它可能是問題,因爲IE瀏覽器不太喜歡它不知道的HTML標記。

試試這個:

$.post(
    "<?php echo site_url('con/met/') ?>", 
    {doi:$('input:text[name=ident]').val()}, 
    parseXmlDoi, 
    "xml" // Or leave this off, your content type should trigger XML handling 
); 

...和改變的parseXmlDoi開始到:

function parseXmlDoi(xmlDoc) 
{ 
    var $xml = $(xmlDoc); 

    // ...now, use $xml.find...// 
} 

通過告訴jQuery的對待響應爲XML,你會得到一個解析的XML文件傳入您的成功功能。然後我們使用$()將該XML文檔包裝在jQuery實例中,以便您可以使用find

0

確定我得到了答案:

我設法從url確切XML在阿賈克斯POST所以響應轉作除了header信息相同。

和編輯我的Ajax調用此:

$.ajax({ 
url:"<?php echo site_url('con/met/') ?>", 
type:"POST", 
data:{doi : $('input:text[name=ident]').val()}, 
dataType: "html", //this should be html because the php page uses echo to give data back 
success: function(data) 
{ 
    var xml; 
    if (jQuery.browser.msie) { //for IE 
     xml = new ActiveXObject("Microsoft.XMLDOM"); 
     xml.async = false; 
     xml.loadXML(data); 
    } else { //for non IE 
     xml = data; 
    } 
    parseXmlDoi(xml); 
    } 
}); 
+0

這不應該是必要的,並且儘可能避免瀏覽器嗅探。當你嘗試我的解決方案時發生了什麼(或者你沒有嘗試過)? –

相關問題