5

我正在尝试将 Backbone 集成到 Yii 中,因此我需要 REST。所以我安装了一个 Yii 扩展,restfullyii,它使用需要传递给请求的用户名和密码。问题是我不知道如何使用 Backbone 来做到这一点。

通缉请求示例:

List
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/    
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/limit/1
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/limit/10/5 (limit/offeset)

当前的错误响应,这完全有道理..:

{
    "success": false,
    "message": "You are not authorized to proform this action.",
    "data": {"errorCode":500}
}

有谁知道如何在整个 Backbone 中发送这些值?

4

1 回答 1

2

Backbone 将其 XHR 请求委托给 jQuery/Zepto,这就是您必须修改的内容。

最简单的解决方案可能是通过$.ajaxSetupheaders 选项提供默认选项

标头(添加 1.5)
默认值:{}

与请求一起发送的附加标头键/值对的映射。此设置在调用 beforeSend 函数之前设置;因此,headers 设置中的任何值都可以在 beforeSend 函数中被覆盖。

你可以这样设置:

$.ajaxSetup({
    headers:{
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    }
});

发送的每个请求都将具有自定义标头。见http://jsfiddle.net/nikoshr/j5Rr4/

或者你可以为每个请求传递额外的选项,Backbone 会将它们转发给 jQuery:

var m = new Backbone.Model();   
m.fetch({
    headers:{
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    }
});

http://jsfiddle.net/nikoshr/j5Rr4/2/

最后,您可以覆盖 Backbone.sync 为每个请求添加标头:

Backbone.realsync = Backbone.sync;
Backbone.sync = function(method, model, options) {
    options || (options = {});
    options.headers = {
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    };

    return Backbone.realsync.call(model, method, model, options);
};

var m = new Backbone.Model();
m.fetch();

http://jsfiddle.net/nikoshr/j5Rr4/4/

于 2012-11-29T13:31:12.173 回答