2011-06-13 101 views
1

我只需要從特定的(跨域)請求中獲取'html'。使用jQuery的ajax來抓取網頁

我正在使用傳遞dataType=json的JQuery.ajax()函數,以便JQuery生成script標記並觸發請求。 下面的代碼:

  var url="http://www.google.com/callback=?"; 
      $.ajax({ 
       type: 'GET', 
       url: url, 
       dataType: 'json', 
       success: function(data) {$("#out").append("success "+data); }, 
       error: function(data) {$("#out").append("failure "+data); }, 
       complete: function(data) {$("#out").append("complete "+data); }, 
       data: {}, 
       async: false 
      }); 

現在,奇怪的一點是,使用螢火蟲,我確實看到生成的腳本標籤,並從遠程服務器的響應,但沒有我的回調被稱爲。 Jquery's script tag injection for cross domain calls

如何從ajax()調用返回的HTML?我是否首先使用了錯誤的功能?

回答

0

回調不會被調用,因爲返回的文檔不是由對該回調的函數調用組成的JavaScript應用程序。

JSON-P通過運行調用頁面上的函數的第三方JS工作。

can't use client side code to get content that isn't expressed as JavaScript from a different origin

如果你想獲得這樣的內容,那麼你需要通過服務器代理它。可以是同一來源的任何一個(所以你可以直接獲取內容)或者一個transforms it to JSON-P

+0

謝謝Qeuntin。如果你仔細閱讀,我試圖擺脫相同的原產地政策,而不需要代理。 jsonp破解是爲了讓瀏覽器發送請求,我知道瀏覽器也接收輸出,但我不能得到它的處理。我很好,如果回調不執行(async = false應該在這裏幫助) – 2011-06-13 07:46:41

+0

瀏覽器不會讓你得到它的處理,這是相同的來源政策的重點。 – Quentin 2011-06-13 07:48:34

+0

好吧,它肯定喜歡螢火蟲比它更喜歡我:) – 2011-06-13 08:01:22