2013-03-09 50 views
0

我有這樣的代碼在JavaScriptAjax調用形式不同的域

var url = 'http://mydomain.com:3000'; 
url += "/user"; 

jQuery.ajax({ 
    url: url, 
    type: "GET", 
    dataType: "jsonp", 
    async: false, 
    success: function (data) {alert(1); 
    console.log(data); 
    } 
}); 

在我的網站上http://mydomain.com:80運行,因此它們不在同一個服務器。

http://mydomain.com:3000通過的NodeJS送達代碼

app.get('/user',function(req,res){  
    var result = { 
    result:-1 
    }; 
    res.json(result); 
    res.writeHead(200, {"Content-Type": "application/json"}); 
}); 

當我調用了ajax我從Chrome預覽響應

{ 
    "result": -1 
} 

得到,但在JavaScript控制檯我得到了錯誤

Uncaught SyntaxError: Unexpected token : user:2 

我沒有收到任何提醒信息。

我甚至在的NodeJS

res.end("'"+JSON.stringify(result)+"'"); 

和鉻預覽響應嘗試是

'{"result":-1}' 

和控制檯錯誤消失,但仍然沒有觸發警報

+1

'async:false' - **壞主意**。不是說使用JSONp時會有所作爲... – ThiefMaster 2013-03-09 12:59:45

+0

關注跨源資源共享? http://enable-cors.org/(使您可以在沒有jsonp的情況下執行ajax調用) – Endless 2013-03-09 13:02:03

回答

0

res.json()發送響應立即。你必須在使用前設置標題。

res.json(result); 
res.writeHead(200, {"Content-Type": "application/json"}); //Response already sent before. 

因此res.writeHead()沒有設置響應頭。您收到的錯誤意味着您的回覆中存在一些非法字符代碼。

Uncaught SyntaxError: Unexpected token : user:2

嘗試設置標頭之前,瀏覽器會正確識別您的郵件爲JSON。

更新

在檢查你的代碼,我再次看到你發送的響應作爲res.json(),但在你的AJAX recieving它jsonp。這兩個是不同的jsonjsonp。您可以在節點中使用res.jsonp(),或者在您的AJAX查詢中將數據類型更改爲json

+0

我曾嘗試使用 res.writeHead(200,{「Content-Type」:「application/json」}); res.end(JSON.stringify(result));但它給了我同樣的錯誤 – 2013-03-09 14:18:23