2013-03-20 54 views
2

工作的一个RESTful API,因此当我访问这在我的浏览器在96.126.111.211/getLeaderBoardNode.js的快递jQuery的Ajax请求不工作

它工作正常,使我能蒙戈数据库中的JSON数据。

虽然当我尝试这样http://jsfiddle.net/yVQ5T/我得到一个JSONP错误

Error: jQuery171037622810900211334_1363808084624 was not called

这里一个jQuery Ajax请求是在服务器端的代码

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(); 
     }); 
    }); 
} 
+1

您是否使用快速使用还是我只是拉从标题和标签?如果你使用Express,你应该使用他们的高级响应函数,比如'res.json(items)',或者更具体地说'res.jsonp(items)',它可以解决你的问题。除非您有特殊情况,否则无需手动将数据写入Express的响应(或结束)。此外,Node.js中的良好做法是显式返回每个函数中的最终语句,以确保当您希望离开它时保留它。 – 2013-03-20 19:50:59

回答

1

您的网址提供定期JSON不是JSONP,你必须把它放在回调函数的调用中,例如

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

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

+0

啊我看到了,所以我需要做那个服务器端。我会试一试,谢谢。 – 2013-03-20 19:44:34

+0

@Ciarán是的,你应该在服务器上处理这个,但Express会处理你的回调和响应格式,你不必担心。如果您使用的是Express 3.0+,则只需使用'.jsonp({})' – 2013-03-20 19:47:04

+0

更改您的'.json({})'调用就可以了。谢谢您的帮助! – 2013-03-20 19:57:24

1

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

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

3.0 Api

2.0 Api

+0

谢谢你的res.jsonp(数据)完美工作。 – 2013-03-20 19:50:01