2012-10-20 91 views
5

嗨,我想通過使用這段代碼從遠程主機讀取JSON。Jquery從遠程主機獲取JSON

<!DOCTYPE html> 
<html> 
<head> 
<script src="jquery.js"></script> 
<script> 
$(document).ready(function(){ 
$("button").click(function(){ 
$.getJSON("http://50.116.19.49/rest/user.json",function(result){ 
    $.each(result, function(i, field){ 
    $("div").append(field + " "); 
     }); 
    }); 
    }); 
}); 
</script> 
</head> 
<body> 

<button>Get JSON data</button> 
<div></div> 

</body> 
</html> 

問題是,當我在瀏覽器中輸入url時,我從它得到json。但未能通過使用上面的jquery方法獲取json。

有人可以幫助這方面。謝謝

+2

除非遠程主機添加適當的跨域頭,你不能。你在控制遠程服務嗎? – PhonicUK

+0

上面給出的json服務是Drupal休息服務。你能告訴我我應該如何跨越原始標題。謝謝。 –

+0

確實REST有jsonp輸出版本,如果是這樣的話使用 – charlietfl

回答

4

你有跨域問題,所以你需要使用JSONP,所以改變你的jQuery方法如下

如果URL包含字符串「callback =?」 (或類似的,由服務器端API定義的 ),請求將被視爲JSONP。

$.getJSON("http://50.116.19.49/rest/user.json?jsoncallback=?",function(result){ 
    $.each(result, function(i, field){ 
    $("div").append(field + " "); 
     }); 
    }); 

jQuery的手冊:http://api.jquery.com/jQuery.getJSON/

+0

我檢查了這個,但它不工作。我的網站啓用了CORS。 –

+8

@ h_a86:那你爲什麼把這個標記爲接受的答案。 – defau1t

+0

你有什麼警報(現場)? – GBD

6

我很樂意假定這個頁面並不是從託管JSON的站點提供的。

您正試圖創建一個跨域請求,大多數(?)瀏覽器都允許這樣做。您正在遇到所謂的瀏覽器的同源策略。這是瀏覽器內置的安全措施。它不會允許您將XHR請求發送到與請求頁面不在同一位置的位置。

大約有這幾個方面:

  1. 使用服務器端代理髮出請求
  2. 使用JSONP發出請求(參見GBD的答案)
  3. 查找到CORS
+0

嗨,我檢查了最後一個鏈接,並驗證我的網站已啓用CORS。 –

+0

然後看看JS控制檯,它告訴你什麼?你使用的是什麼瀏覽器? –

+0

我正在使用Chrome。有沒有任何替代方式做這個任何jQuery或JavaScript黑客。 –