簡體   English   中英

我可以通過AJAX從外部頁面加載數據嗎?

[英]Can I load data from an external page via AJAX?

我剛開始學習jQuery和AJAX。 我可以通過jQuery.load()將本地頁面(在我的磁盤上)加載到div中,但外部站點似乎不起作用。 我甚至使用wireshark來檢查數據是否從服務器發送(它是)。 示例代碼如下:

<html>
<head>
    <script src='jquery-1.4.2.min.js'></script>
    <script>
        $(document).ready(function() {
            // $('#test').load('localpage.htm'); works!
            $('#test').load('http://www.google.com/'); // does not work!
        });
    </script>
</head>
<body>
<div id='test'></div>
</body>
</html>

首先可以做到這一點嗎? 如果是這樣,怎么樣?

您不能對腳本來源之外的其他域執行ajax調用。

要做這樣的事情,你必須在自己的頁面上使用代理頁面,例如:

<script>
    $(document).ready(function() {
        $('#test').load('ajax/getgoogle.php');
    });
</script>

getgoogle.php:

<?php

echo file_get_contents("http://www.google.com/");

?>

開箱即用:沒有。 這是一個安全問題。 但是有一些 不同的 解決方法

你正在遇到同源政策 您無法使用AJAX從外部域訪問數據,這被視為安全風險。 其背后的原因是AJAX請求使用瀏覽器存儲的cookie - 如果我嘗試訪問facebook.com,並且您已登錄,則會發送cookie並且我可以訪問您的個人數據。

出於安全原因,您不能使用AJAX從不同的域(或協議或端口)請求頁面。

相反,您可以在服務器上編寫服務器端腳本以將請求轉發到另一個域。 (如果您從file://運行頁面,則無法執行此file:// url)

阿賈克斯? 是。 XHR? (除非瀏覽器實現了尚未普及的跨站點XHR )。

要在不使用XHR的情況下使用Ajax獲取數據,外部站點必須提供JSONP格式的數據。

或者,您可以通過服務器上的服務器端腳本代理數據,從而使其來自同一主機(就JavaScript而言)。

不,這不對。 看看同源政策 您嘗試請求的站點需要啟用JSONP才能工作,並且您將使用跨域回調 或者,您可以在自己的域上創建代理,代表您的ajax請求抓取頁面。

加載此PHP腳本,而不是嘗試直接加載網站

$filename = "http://www.sitename.com";
$handle = fopen($filename, "r");
if ($handle)
{
    while (!feof($handle))
    {
        $text .= fread($handle, 128);
    }
    fclose($handle);
}
print $text;

編輯:或者只是喜歡henchman的file_get_contents解決方案

您無法從其他域調用Ajax。 檢查JSON技術

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM