0

我已经获得了从服务器到浏览器的响应 json 数据,但是很困惑,数据无法在浏览器中显示,我在控制台中发现了错误,告诉我“未捕获的语法错误:意外的令牌:”。这是我在节点 js 中的代码。

function callFacebook(){
$.ajax({
    url: "http://192.168.37.179:8888/facebook/connect?callback_=[TIMESTAMP]",
        type: "GET",
        dataType: "jsonp",
        jsonp:"jsonp",
    cache: true,
    timeout: 5000,
    success: function(data) {
        execute(data);
    },
    error:function() { console.log('Uh Oh!'); }
});

这里是响应 json 数据: res.header('Content-Type','application/json'); res.header('Charset','utf-8'); res.send({"something": "father"});

4

1 回答 1

0

从服务器发送的只是普通的 JSON 数据,但在客户端,您需要的是 JSONP。来自服务器的响应不是 JSONP,并且浏览器会因为语法错误而引发异常。

如果您需要从服务器发送 JSONP,那么如果您使用的是 express 添加额外的use

app.configure(function() {
  app.set('jsonp callback', true);
});

然后发送 JSONP 只需稍作改动res。您不再需要设置任何标题,因为它们会被自动检测到:

res.jsonp({ hello: 'world' });

在客户端,jQuery 会自己添加回调,所以使用这种简化的方式:

$.ajax({
  url: "http://192.168.37.179:8888/facebook/connect",
  type: 'GET',
  dataType: 'jsonp',
  cache: true,
  timeout: 5000,
  success: function(data) {
    console.log(data)
  },
  error: function(xhr, status, error) {
    console.log('error[' + status + '] jsonp');
  }
});

同样,如果您的节点是通过 nginx 或任何其他 Web 平台代理的,请不要忘记在utf8那里启用编码。

于 2013-07-01T16:09:04.767 回答