2012-02-01 67 views
1

我正在測試一個本地主機上的JavaScript代碼。該文件需要來自JSON格式的遠程服務器的數據。當我直接點擊JSON網址時,我得到的數據,但在JavaScript中,我得到空迴應。

可能是什麼原因?我正在使用jquery post方法來獲取數據。

回答

0

正如其他人所說,你不能使用AJAX來訪問遠程服務器。你必須使用JSONP。如果您沒有控制其他服務器,或者如果其他服務器不提供JSONP,則必須使用代理。

在PHP中編寫一個非常簡單。 http://www.betavine.net/bvportal/blog/view.html?blogId=101&postId=ff8080811afe49d3011afe4bb5de0003

<? 
ob_start(); 

$url = $_REQUEST['url']; 
$curl_handle = curl_init($url); 
curl_setopt($curl_handle, CURLOPT_HEADER, 0); 
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy"); 

$content = curl_exec($curl_handle); 
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE); 
curl_close($curl_handle); 
header("Content-Type: $content_type"); 
echo $content; 
ob_flush(); 
?> 
1

$.post是一個ajax方法,您不能使用ajax方法來訪問不同來源的數據。

詳見the jQuery docs

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

1

有一個設置JavaScript的保護措施,你應該看看。這是相同的來源政策。基本上,這意味着如果您想爲來自服務器的數據執行XmlHttpRequest,而這個服務器與您所在的頁面不是同一個來源,那麼除非您跳過這些環節,否則您不能這樣做。

查看JSON-P或jQuery用於克服此問題的方法。

1

從不同的域請求數據被限制爲一個安全的關注(參見CORS),具體地防止XSS(跨站點腳本)攻擊。

你可以試試幾個選擇:

  • JSONP是一個選項,如果在其他領域支持它
  • here's另一個相關的問題

您可以使用YQL從另一個請求資源域。

除了這些替代方法,您可以隨時創建一個服務器代理並讓該代理查詢域並返回結果。

1

您要求的服務器必須支持JSONPCORS

否則,這是不可能的。

它也不可能使使用POST JSONP請求,它必須是GET

相關問題