2011-01-13 64 views
-3

我遇到了使用jQuery檢索位於外部域的RSS提要的問題。它在Safari中工作,但由於同源策略限制(也記錄有關$ .ajax()函數),其他瀏覽器會出錯。同源策略,Javascript/jQuery AJAX和檢索RSS XML feed

想知道我是如何修復它的嗎?

+0

嗯,嗯,我認爲通常的解決方案是提供一個代理腳本,它與您的頁面位於同一個域中。那還是JSONP。 – tdammers 2011-01-13 23:32:01

+2

不,我不想知道 – mkoryak 2011-01-13 23:57:49

回答

3

有三種方式,以繞過同源策略:

  1. 代理 - 草莓Sheurbert一樣,完全有效的,但浪費帶寬和計算能力
  2. JSONP - 加載數據通過script標籤。需要來自源網站的合作,基本上是黑客和笨拙。
  3. CORS - 「正確」的方式,優雅和細微差別,但需要很多從源網站的合作,並不適用於舊版瀏覽器。

你付出你的錢,你抓住機會。

-2

我做了一個簡單的PHP腳本像這樣:

<?php 

/* 
    fetch.php fixes this issue: http://en.wikipedia.org/wiki/Same_origin_policy 

    Read more: 
     * http://api.jquery.com/jQuery.ajax/ 
     * http://stackoverflow.com/questions/3595515/xmlhttprequest-error-origin-null-is-not-allowed-by-access-control-allow-origin 
     * http://stackoverflow.com/questions/1653308/access-control-allow-origin-multiple-origin-domains 
*/ 

// Requires URL 
if (!isset($_REQUEST['url']) || empty($_REQUEST['url'])) exit('No url specified'); 

// Set content-type 
$type = 'application/rss+xml; charset=utf-8;'; 
if (isset($_REQUEST['type']) && !empty($_REQUEST['type'])) { 
    $type = urldecode($_REQUEST['type']); 
} 

// Adapted from http://www.howtogeek.com/howto/programming/php-get-the-contents-of-a-web-page-rss-feed-or-xml-file-into-a-string-variable/ 
function get_url_contents($url){ 
    if (function_exists('curl_init')) { 
     $crl = curl_init(); 
     $timeout = 5; 
     curl_setopt ($crl, CURLOPT_URL, $url); 
     curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $ret = curl_exec($crl); 
     curl_close($crl); 
     return $ret; 
    } else { 
     return file_get_contents($url); 
    } 
    return 'Could not retrieve url'; 
} 

// Output content from url 
header('Content-type: ' . $type); 
echo get_url_contents(urldecode($_REQUEST['url'])); 


?>

這幾乎垃圾尋找,但它工作得很好的時刻。我希望它有幫助。