【问题标题】:Node.js Express jquery ajax request not workingNode.js Express jquery ajax请求不起作用
【发布时间】:2013-03-10 02:43:01
【问题描述】:

使用 RESTful api,当我在浏览器中的 96.126.111.211/getLeaderBoard 访问它时

它工作正常,并为我提供了我的 mongo 数据库中的 JSON 数据。

虽然当我尝试像 http://jsfiddle.net/yVQ5T/ 这样的 jquery ajax 请求时,我得到一个 jsonp 错误

错误:没有调用 jQuery171037622810900211334_1363808084624

这是服务器端的代码

getLeaderBoard(req, res)
{
    this.db.collection(this.settings.userTable, function(err, collection) => {
        collection.find().toArray(function(err, items) {
            res.writeHead(200, {'Content-Type': 'application/javascript'});

            res.write(JSON.stringify(items));

            res.end();
        });
    });
}

【问题讨论】:

  • 您使用的是 Express 还是我只是从标题和标签中提取出来的?如果您使用 Express,您应该使用他们的高级响应功能,例如 res.json(items) 或更具体地说,res.jsonp(items) 应该可以解决您的问题。除非您有特殊情况,否则无需手动将数据写入 Express 的响应(或结束)。此外,Node.js 中的良好做法是在每个函数中显式返回最终语句,以确保您在预期离开时离开它。

标签: jquery ajax node.js express restful-architecture


【解决方案1】:

您的网址提供常规 JSON 而不是 JSONP,您必须将其放在回调函数的调用中,例如

jQuery171037622810900211334_1363808084624 ([{"userId":"100821494565115211032","winCount":4,"_id":"5148caa1a1651dff12000002"}]);

由于回调名称是动态生成的,因此您必须从请求中读取它们。

【讨论】:

  • 啊,我明白了,所以我需要做那个服务器端。我会试试的,谢谢。
  • @Ciarán 是的,您应该在服务器上处理这个问题,但 Express 会为您处理回调和响应格式,您不必担心。如果您使用的是 Express 3.0+,则只需将您的 .json({}) 调用更改为 .jsonp({})
【解决方案2】:

如果您使用的是 Express 3.0,您可以查看 response.jsonp,它与 response.json 的使用相同。如果您从另一个域访问您的服务器,那么由于浏览器作为安全措施实施的跨域请求限制,您将不得不使用 JSONP 协议。

在 express 2.x 中,您需要通过 app.enabled("jsonp callback") 启用 JSONP 响应处理,然后使用 response.json

3.0 Api

2.0 Api

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 2012-12-13
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多