跨域XHR与节点上的过滤器js

时间:2013-02-15 11:03:42

标签: javascript jquery node.js xmlhttprequest cross-domain

我使用percolator js CRUDCollection实现了一个小API。它由localhost:3000上的节点提供服务。 现在我希望能够在我的django应用程序上运行localhost:8000,但它失败并显示错误Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin.

我尝试在过滤器功能中设置标头,但它被忽略了:

list: function($, cb) {
    $.authenticate = checkAuth;
    $.res.setHeader('Access-Control-Allow-Origin', '*');
etc...

我将JSONP视为一种替代方案,但无法弄清楚在回调函数中包装响应的钩子。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这是我第一次听说过Percolator.js。这是一个有趣的图书馆。

无论如何,设置$.res.setHeader('Access-Control-Allow-Origin', '*');对我有用。您是否检查过此标题是否实际存在?

现在关于JSONP。您可以使用collectionGET代替list

collectionGET:function($) {
    var data = ...; // some code here

    var data_str = $.json(data).toString( ),
        url = require("url").parse($.req.url, true),
        jsonp = url.query.callback && url.query.callback.length && url.query.callback;

    if (jsonp) {
        $.res.setHeader( "content-type", "application/javascript" );
        $.res.write( jsonp + "(" );
    } else {
        $.res.setHeader( "content-type", "application/json" );
    }
    $.res.write( data_str );
    if (jsonp) {
        $.res.write( ");" );
    }
    $.res.end();
}

虽然它有点低级(似乎Percolator.js在响应中添加了一些额外的东西)。也许你需要其他东西,然后Percolator.js为你的任务。