我正在尝试将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中发送这些值?
答案 0 :(得分:2)
Backbone将其XHR请求委托给jQuery / Zepto,这就是你必须修改的内容。
最简单的解决方案可能是通过$.ajaxSetup
和headers options
标题(已添加1.5)
默认值:{}要与其一起发送的其他标题键/值对的映射 请求。在调用beforeSend函数之前设置此设置; 因此,标题设置中的任何值都可以覆盖 在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();