2017-07-22 56 views
2

在我的網站上,我試圖編寫一個JavaScript腳本,當點擊一個按鈕時,它會從某些網站的HTML源代碼中提取數據,並在我的網站上顯示已解析/已清理的數據。如果URL只有「一條HTML線」,jQuery.load()如何工作跨域?

在閱讀TutorialsPoint's JQuery - Ajax page,展示了jQuery.load()方法,

<script type = "text/javascript" language = "javascript"> 
    $(document).ready(function() { 
     $("#driver").click(function(event){ 
      $('#stage').load('/jquery/result.html'); 
     }); 
    }); 
</script> 

我決定嘗試一下我的網站上。我將網址從相對網址改爲絕對網址 - 「http://www.tutorialspoint.com/jquery/result.html」 - 令我驚訝的是,它實際上正在運行(點擊提取數據)。這與我的理解矛盾,在閱讀數十個SO線程以及jQuery.load()API時,HTTP請求將受制於同源策略。

由於瀏覽器安全限制,大多數「Ajax」請求都受到相同的源策略的限制;該請求無法成功從不同的域,子域,端口或協議中檢索數據。 〜API

當我改變像http://google.com/http://www.example.com/腳本不起作用的URL的東西。

的aforereferenced教程頁的行吸引了我的眼球:

這裏的load()發起一個Ajax請求到指定的URL /jquery/result.html文件。加載這個文件後,所有的內容都會被標記爲ID階段。 假設,我們/jquery/result.html文件只有一個HTML行

怎麼來的負載()的作品,跨域,如果在指定的URL的HTML文件有單獨一條線?

+1

這取決於服務器。如果服務器允許:'Access-Control-Allow-Origin:*'那麼它可以工作。 –

+1

Downvoters請解釋。我的問題沒有看到任何天生的錯誤。 –

+0

嘿,這可能是因爲他們的投票被鎖定了。我編輯了問題並添加了投票。很快它就會熄滅。現在是0。 –

回答

2

這不是關於文件或結構。這是關於啓用Cross Origin Request Sharing。如果相關服務器或請求具有以下標頭:

Access-Control-Allow-Origin: * 

這將使AJAX能夠從跨域獲取文件。

事實上,例如,通過Hurl.it發送HTTP GET請求,確認標題存在。

Request picture

0

我意識到沒有辦法的功能可以違反同源策略。

通過Hurl.It發送GET請求到HTML頁面產生的原因:

GET http://www.tutorialspoint.com/jquery/result.html

HEADERS

...

*訪問控制允許來源:*

...

+0

是......這就是我在我的答案中加入的......':)' –

1

內部load()僅僅是$.ajax的快捷方式,爲load()代碼

function load(url, params, callback) { 
    // ... some checks and stuff 
     jQuery.ajax({ 
      // settings 
     }).done(function (responseText) { 
      self.html(selector ? 
      jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) : responseText); 
     }).complete(callback && function (jqXHR, status) { 
      self.each(callback, response || [jqXHR.responseText, status, jqXHR]); 
     }); 
    } 
    return this; 
} 

在這種情況下,服務器返回正確的標題爲CORS requests,如果你看一下請求,響應頭文件包括

Access-Control-Allow-Headers:X-Requested-With 
Access-Control-Allow-Origin:* 

這意味着它允許來自不同來源的請求,所以它與無關所有,任何Ajax請求將正常工作到URL,因爲它不受同源策略

的跨來源資源共享標準的作品,通過添加新的HTTP 頭,讓服務器來形容允許使用網絡瀏覽器讀取該信息的一組原點是 。