我正在尝试通过在我的网络应用程序中附加一个会话令牌(由服务器与浏览器cookie匹配)作为参数来保护我的AJAX调用。
我希望避免在每个Ajax.Updater()
请求中将令牌指定为附加参数,因为这可能会非常繁琐。所以我认为将此令牌全局,自动地附加到每个请求可能更有效。
我想知道Ajax.Responder
是否可以解决这个问题。似乎它应该能够在它发出之前拦截任何Ajax请求,并修改参数以在令牌发送之前添加它。但是,我不知道我将如何完成它。我需要原型'Ajax.Responder'和'刻录'一个额外的参数吗?或者有更简单的方法吗?
我对Ajax.Responder
的理解有点弱,所以如果有人能够澄清为什么在他们的回答中会有或不可能,那将非常感激。
答案 0 :(得分:3)
我遇到了类似的问题,最后为Ajax.Request类实现了一个简单的addParameters()方法扩展,以便为GET和POST请求完成此操作。
您可以在此处查看实施:https://gist.github.com/3212413。
欢迎反馈!
答案 1 :(得分:1)
Prototype在调用Responders回调之前设置参数数组,因此您不能只将参数哈希添加到参数哈希中。您可以将变量附加到url,例如,这会为每个请求添加一个缓存buster随机数......
Ajax.Responders.register({
onCreate: function(o,x) {
o.url += (o.url.include('?') ? '&' : '?') + "rnd=" + Math.floor(Math.random()*1000000000);
}
});
答案 2 :(得分:0)
这是我为POST请求实现的方式,受Gavin's answer的启发:
Ajax.Responders.register({
onCreate: function(request) { // add form_key to ajax request
var formKey = $('form_key');
var parameters = request.parameters;
parameters.form_key = formKey.value;
request.options.postBody = Object.toQueryString(parameters);
}
});