在express.js中使用jsonp作为node.js

时间:2012-12-18 07:38:28

标签: node.js express jsonp

我正在创建一个简单的JSON API,它只使用node-js使用jsonp返回一个对象 这是服务器端的代码:

app.get('/vit',function  (req,res,next) {
    res.type('application/json');
    res.jsonp(items);  //items is the object
});

在部署到nodejitsu,并转到url / vit时,我得到了对象项。这意味着它在服务器端工作。

我有另一个域,我希望使用jsonp获取此对象 继承客户端代码:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
    $.getJSON('http://trial.jit.su/vit',function  (data) {
       console.log(data) ;
    });
</script>

但是我在控制台上收到以下错误:

XMLHttpRequest cannot load http://trial.jit.su/vit. Origin http://jquer.in is not allowed by Access-Control-Allow-Origin.

好像我还不懂Jsonp。

1 个答案:

答案 0 :(得分:6)

引用jQuery文档

  

如果网址包含字符串“callback =?” (或类似的,由服务器端API定义),请求被视为JSONP。有关更多详细信息,请参阅$ .ajax()中有关jsonp数据类型的讨论。

http://api.jquery.com/jQuery.getJSON/

您需要一个带问号的查询字符串参数作为占位符。

查看http://trial.jit.su/vit的响应,你错过了回调函数。你只是在没有P的情况下返回普通的JSON,例如:如果网址包含?callback=bacon,则您的回复需要

bacon({"your": "json string"});

但是,只要您提供callback参数,快递将为您执行此操作。

所以只需更改以下内容:

$.getJSON('http://trial.jit.su/vit?callback=?',function  (data) {
    console.log(data) ;
});