Ajax调用形式不同的域与jQuery无法呈现正确的数据

时间:2013-03-09 12:58:32

标签: jquery ajax node.js

我在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}'

并且控制台错误消失但仍未触发警报

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。这两者是不同的jsonjsonp。您可以在节点中使用res.jsonp()或在AJAX查询中将数据类型更改为json