2014-01-10 78 views
4

我使用Chrome擴展程序鍛鍊,我使用Ajax請求從請求的URL獲取HTML。這有效,但我想要獲得所有文本值的某些元素。舉例,一切都與類.heading-bold

的script.js爲什麼我無法在jQuery中解析Ajax html GET響應?

$.ajax({ 
     url: "http://page.com/page.html", 
     type: "GET", 
     dataType: "html", 
      success: function(data) { 
       console.log($(data).filter('.heading_bold').text()); 
      } 
    }); 

響應HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head><title>Beerpong</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta http-equiv="Expires" content="0" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <meta http-equiv="Cache-Control" content="no-cache" /> 
    </head> 
    <body> 
     <div id="table-container"> 
      <table> 
       <tbody> 
        <tr> 
        <td><div class="heading_bold">Beerpong</div></td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
    </body> 
    </html> 

它登錄到控制檯的工作就好了。這是我的輸出:

Uncaught Error: Syntax error, unrecognized expression: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0.... 

爲什麼?爲什麼不只是console.log我想要的值?

+4

_不是語法錯誤的原因,但您的選擇器需要是''.heading_bold'',而不是'#heading_bold''。 – nnnnnn

+1

@nnnnnn錯誤,但仍然拋出erorr:「未捕獲的錯誤:語法錯誤,無法識別的表達式:<!DOCTYPE ...」 – Jack

回答

16

如果您使用jQuery 1.9,這樣做:

... 
success: function(data) { 
    var html = $.parseHTML(data); 
    console.log($(html).find('.heading_bold').text()); 
} 
.. 

因爲按照jQuery 1.9 ::傳遞給jQuery的()HTML字符串比一個小於字符將被解釋爲選擇其他的東西開始。由於字符串通常不能被解釋爲選擇器,最可能的結果將是Sizzle選擇器引擎拋出的「無效選擇器語法」錯誤。使用jQuery.parseHTML()來解析任意的HTML。

+1

嘗試了您的代碼段,現在我得到一個空輸出。而且我已經仔細檢查了元素是否存在以及它的語法是否正確。它應該是,但只是一個空輸出。 – Jack

+1

@Jack嘗試使用.find()而不是.filter() –

+0

啊!最後,歡呼! – Jack

1

如果您想要將遠程文檔的一部分插入DOM,也許您可​​以嘗試使用「load」而不是「$ .get()」。

$("#result").load("page.html .heading_bold",function(response){ 
console.log($(this).find(".heading_bold").val());   
}); 

希望這對你有幫助。

+0

這是一個跨域請求,「load」不會做這個工作。 – Jack

+0

$ .ajax調用仍然存在跨域問題...對嗎?只是好奇...你用什麼策略來克服跨域問題? CORS或代理? – Chickenrice

+0

我使用一個通過目標隧道的PHP代理 – Jack