锁定老帖子 主题:在Rails3时代js该怎么写?
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-25
actionpack-2.3.4/lib/action_controller/request_forgery_protection.rb # 87 行
def verified_request? !protect_against_forgery? || request.method == :get || request.xhr? || !verifiable_request_format? || form_authenticity_token == params[request_forgery_protection_token] end |
|
返回顶楼 | |
发表时间:2009-09-25
用Ruby on Rails没用视图的飘过~
|
|
返回顶楼 | |
发表时间:2009-09-27
最后修改:2009-09-27
rainchen 写道 在application.js 中加入: $(function(){ // set authenticity koen for Rails if(typeof AUTHENTICITY_TOKEN != 'undefined' && AUTHENTICITY_TOKEN != ''){ $.ajaxSetup( {data: {authenticity_token: AUTHENTICITY_TOKEN}} ); } 然后在使用特定ajax操作的时候,如下: $.ajax({ type: "POST", url: "url", dataType: "json", data: "title=abc", success: function(data){ // do something } }); 这里通过指定data向服务端发送额外数据会重写application.js中定义的data参数。 能否在ajaxSetup方法中获取特定ajax请求的options然后扩展之,像这样?但不行: $.extends({ data: { authenticity_token: AUTHENTICITY_TOKEN }}, options); 现在遇到这个问题,请给个思路。谢谢! |
|
返回顶楼 | |
发表时间:2009-09-27
blablabla 写道 rainchen 写道 在application.js 中加入: $(function(){ // set authenticity koen for Rails if(typeof AUTHENTICITY_TOKEN != 'undefined' && AUTHENTICITY_TOKEN != ''){ $.ajaxSetup( {data: {authenticity_token: AUTHENTICITY_TOKEN}} ); } 然后在使用特定ajax操作的时候,如下: $.ajax({ type: "POST", url: "url", dataType: "json", data: "title=abc", success: function(data){ // do something } }); 这里通过指定data向服务端发送额外数据会重写application.js中定义的data参数。 能否在ajaxSetup方法中获取特定ajax请求的options然后扩展之,像这样?但不行: $.extends({ data: { authenticity_token: AUTHENTICITY_TOKEN }}, options); 现在遇到这个问题,请给个思路。谢谢! ajaxSetup看名字就知道是个全局的初始化作用,你要每次提交不同,可以利用另一个全局的ajax钩子 ajaxSend: Attach a function to be executed before an AJAX request is sent. This is an Ajax Event. 具体查API:http://docs.jquery.com/Ajax/ajaxSend#callback 它有function (event, XMLHttpRequest, ajaxOptions) 这个三个参数, 你在这里扩展ajaxOptions即可,你不要用string的形式,用json object的方式即可:如: data: {title:abc"} 只有同名的KEY才会覆盖值。 |
|
返回顶楼 | |
发表时间:2009-09-27
最后修改:2009-09-27
谢谢rainchen。总结一下,现在有两种方式:
第一种就是用json传参而不是用不科学的string,这样jquery会$.extend()之。 第二种利用另一个全局的ajax钩子,如下: $(document).ajaxSend(function(event, request, settings) { if (typeof(AUTH_TOKEN) == "undefined" || AUTH_TOKEN == '' ) return; settings.data = settings.data || ""; settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(AUTH_TOKEN); }); 不过这种方法好像在用ajax不定义data参数的时候,服务器会500。貌似是字符串拼接出了问题....所有还是用json传参。。 参考的这里:http://polyrails.com/2008/11/11/steps-to-unobtrusive-rails-with-jquery 最后再次谢谢rainchen. |
|
返回顶楼 | |
发表时间:2010-07-30
jquery的live事件在IE有BUG
github上有人发一个解决的方法,我正好遇到这个问题,测试过可以用。 http://github.com/rails/jquery-ujs/issues#issue/8 |
|
返回顶楼 | |