我可以使用Ajax.Responder向PrototypeJS Ajax请求添加参数吗?

时间:2011-04-13 15:16:01

标签: javascript ajax parameters prototypejs

我正在尝试通过在我的网络应用程序中附加一个会话令牌(由服务器与浏览器cookie匹配)作为参数来保护我的AJAX调用。

我希望避免在每个Ajax.Updater()请求中将令牌指定为附加参数,因为这可能会非常繁琐。所以我认为将此令牌全局,自动地附加到每个请求可能更有效。

我想知道Ajax.Responder是否可以解决这个问题。似乎它应该能够在它发出之前拦截任何Ajax请求,并修改参数以在令牌发送之前添加它。但是,我不知道我将如何完成它。我需要原型'Ajax.Responder'和'刻录'一个额外的参数吗?或者有更简单的方法吗?

我对Ajax.Responder的理解有点弱,所以如果有人能够澄清为什么在他们的回答中会有或不可能,那将非常感激。

3 个答案:

答案 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);
    }
});