我在javascript中有这段代码
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)+"'");
并且Chrome预览响应为
'{"result":-1}'
并且控制台错误消失但仍未触发警报
答案 0 :(得分:0)
res.json()
立即发送回复。您必须在使用之前设置标题。
res.json(result);
res.writeHead(200, {"Content-Type": "application/json"}); //Response already sent before.
因此res.writeHead()
未设置标头作为响应。您获得的错误意味着您的回复中存在一些非法的字符代码。
Uncaught SyntaxError:意外的令牌:user:2
尝试设置标头之前,浏览器会正确地将您的消息标识为JSON。
<强>更新强>
再次检查您的代码时,我看到您发送的响应为res.json()
,但在您的AJAX中收到jsonp
。这两者是不同的json
和jsonp
。您可以在节点中使用res.jsonp()
或在AJAX查询中将数据类型更改为json
。