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

问题描述:

我试图通过将附加会话标记(由服务器的浏览器cookie进行匹配)作为参数应用于从我的web应用创建的每个AJAX请求来保护我的AJAX调用。我可以使用Ajax.Responder向PrototypeJS Ajax请求添加参数吗?

我想避免必须在每个请求中指定令牌作为附加参数,因为这可能会很快变得繁重。所以我认为将这个标记自动地附加到每个全局请求可能会更有效。

我想知道Ajax.Responder是否可以解决这个问题。看起来它应该能够在创建之前拦截任何Ajax请求,并修改参数以在令牌发出之前添加该令牌。但是,我不知道如何去完成它。我是否需要创建“Ajax.Responder”原型,然后“烧入”一个附加参数?还是有更简单的方法?

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

Prototype在调用Responders回调函数之前设置参数数组,因此您不能只将参数哈希值添加到您想要的项目中。您可以将您的变量追加到URL,例如这将克星随机数字添加缓存到每个请求......

Ajax.Responders.register({ 
    onCreate: function(o,x) { 
    o.url += (o.url.include('?') ? '&' : '?') + "rnd=" + Math.floor(Math.random()*1000000000); 
    } 
}); 
+0

我更喜欢使用当前时间戳打破缓存。 – 2011-04-20 13:57:35

+0

在你的例子中,你传递给onCreate函数的参数是'o'和'x'?另外,即使我可能无法通过哈希添加参数,我可以在请求发送之前将它追加到参数数组吗?或者是数组是一个不能直接访问的私有变量? – StickByAtlas 2011-04-21 17:12:31

+0

从原型文档 - 这需要两个参数:请求者对象和底层的XHR对象...您不能只在此处设置参数对象,因为查询字符串已被调用..您可以尝试重建查询字符串自己根据参数,但那不是很干净,或便携式.. – Stephen 2011-04-21 17:23:31

我遇到了类似的问题,并最终实现一个简单的addParameters()方法扩展Ajax.Request类为GET和POST请求完成此操作。

你可以看看这里的实现:https://gist.github.com/3212413

反馈欢迎!

我这是怎么实现的一个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); 
    } 
});