2010-07-20 58 views
12

我已經建立了和的NodeJS當我瀏覽到URL它的返回數據:http://184.106.206.235會的NodeJS沒有數據返回到jQuery.getJSON

然而,當我嘗試使用$.getJSON調用該URL,回調節目nulldata變量,"success"textStatus變量。

我想這可能是一個跨域的事情,但我很驚訝,textStatus"success"如果是這樣的話。

在情況下,它是有幫助的,這裏的服務器端JS:

http.createServer(function(req, res){ 
    var output = {message: "Hello World!"}; 
    var body = JSON.stringify(output); 

    res.writeHead(200, {'Content-Type': 'application/json', 'Content-Length': body.length}); 
    res.end(body); 
}).listen(80, "184.106.206.235"); 

任何想法?

+0

是JavaScript託管在'HTTP:// 184.106.206.235'? – Anurag 2010-07-20 23:12:53

+0

是的,儘管我試圖使用託管在不同域上的「客戶端」JS來訪問它。 – marclar 2010-07-20 23:20:35

+0

那麼那會是你的問題。什麼「文本狀態」? – Pointy 2010-07-20 23:50:58

回答

16

添加的「訪問控制允許來源」:「*」屬性設置爲您writeHead()調用:

res.writeHead(200, { 
    "Content-Type": "application/json", 
    "Access-Control-Allow-Origin": "*" 
}); 
+0

謝謝,這是很好的答案! – oivoodoo 2011-02-13 22:14:58

+0

json數據的內容類型應該是application/json,參見http://stackoverflow.com/questions/477816/the-right-json-content-type – 2012-01-01 22:16:49

3

只是說明了有同樣的問題的人,解決上述工作對我來說只有一個小改動:

「內容類型」:「應用/ JSON」

不是「文字/ JSON」 。

感謝您的解決方案!這讓我瘋狂。

2

如果你正在使用express框架,你可以嘗試以下之一:
1. res.contentType('json');設置爲內容類型。
2. res.send({ some: 'json' });將設置內容類型併爲您解析。
3. res.json({ user: 'tj' });可能是最好的辦法。

希望它能幫助:)