jQuery-ujs——让request method中的put、delete也可以动作

Rails預設是配合prototype來做到一些 Ajax 的功能的,不過他其實也可以配合jQuery,只要配合jQuery-ujs這個 Gem 就可以,前陣子從頭開始學 Rails 3 的時候開始接觸到這個 plugin,後來花了些時間看他的原始碼,發現他的設計其實很棒,一如 Rails 的風格,非常的 Best Practice 的設計,因此事實上,不需要是 Rails Application 也很容易就可以利用它。

jQuery-ujs 全名 Unobtrusive scripting adapter for jQuery ,是由 Rails Team 的人開發,所以也是個官方支援,用了custom eventdata-* 屬性這兩種東西所建立出來的,不亂入的 JavaScript adapter ,jQuery-ujs 的基本設計是用 data-* 屬性來記錄連結或是表單的一些行為,是不是要用XHR 送 request ,HTTP request 是 POST、GET 還是 DELETE 等等,而這些 XHR request 的事件就用 ajax:beforeSend、ajax:success 等自定事件來處理,所以假設你要做一個連結,點下去會去遠端抓一個 JSON 資料回來,那你的 HTML 會要這樣寫:

<a href="/getme.json" data-remote="true" data-type="json">Click Me !</a>

然後 JavaScript 這邊這樣寫:

$('a').bind('ajax:success', function (data, status, xhr) {
    //data is parsed JSON object
    //do something with data here
});

這樣就可以讓 Click Me ! 這個連結被點到時,用 XHR Request 取代換頁到那個網址,然後回來的資料就會自動進 callback function ,而除了 ajax:success 外,還有 ajax:error 可以做錯誤處理,另外還有兩個事件,詳細的資料在官方文件有,另外還有一份文件則是關於支援的 data-* 屬性,這兩份看一下就可以正確的使用 jQuery-ujs 了。

而除了文件上寫到的,還有兩個特色是直接沿用 Rails 的 Best Practice ,第一個是 _method 參數,雖然 HTTP 有設計了四種 request method:POST、GET、PUT、DELETE,但是 HTML 表單卻只有 POST 和 GET 兩種可以用,但是 Rails 的RESTful API定義的七種動作中,把四種 request method 都用到了,所以為了讓 PUT 和 DELETE 也可以動作, jQuery-ujs 會在必要的時候,多送一個 _method 參數,告訴 server 端,現在實際上是哪種 request 。

另一個就是CSRF了,Rails 對付 CSRF 的方法就是很常見的,用 token,只不過它是寫在<meta name='csrf-token'>裡面,然後 jQuery-ujs 會去把它的值抓出來,也當成參數一起送出,如果是 XHR 的話,則會寫在 HTTP header 裡面,因為使用的方法都很簡單好懂,如果是自己寫的 server 架構,也可以依照這個原則來配合 jQuery-ujs 來檔 CSRF 的攻擊。

這篇簡單介紹了幾個 jQuery-ujs 的特色,而我最後還有一個覺得可以使用它的理由,就是它現在是 Rails 官方維護,有持續更新,而且品質還算可靠(最近 jQuery 1.5 改了 ajax 結果就...)。

原文:https://blog.othree.net/log/2011/03/09/jquery-ujs/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
H4sIAAAAAAAAAO1YS2/bRhD+Kwblo0XzsXxIN8F2GgN2asR2e6gLYkUuzY1ILrFcSlACA+qhaHtpDi0KFOm1l556aIuiyJ/RwS76LzrLhy3ZUmwjbZAY0kXk7Mzuzsz3fUvysxeKJzj2Bx4NlK6pIYR0yzA3FEETonR120WuYbqWriEDjOMMjEoZoGwoAc0FTX1RxioGwmZomMh3+m4Qaj444JSl44QV+VKPmPaV7gtlHf69hIiIST+fBQTG1stBpZcGnEF8ZfCGhOeUpTBgqYZqSTPOshkzUpHqNt4BEZjG5ZyJmpM0ZzwPsMAqTnE8FtTP4aqcX82Dgdrr5zI5cVh5boNn72C31Soz3hmSVOymgnCIbbUW+6rP8BC3WjqyLeVsQyEyBpZPMuFV1xtKxllGuKAkL1PPfU5I6kWEnkbg6uoa7J3ld848xbJTyv7BETqWtoAMqU+WVnw9gerKiuwX+4W873OogFztyfbTj3e3lXL1mcVsVVP1N5RZIuU5S4nHwjAnkEEbuTKFBKdFCPUpOOHg/2TnaKd3uCMj6oxHNBARYAwhbVGz5XJlEkmiyu5BCYc4l/WLsQgZT7wajlt7B2u9LIMRmnsxO6WwPcELAuiSN14Wyd2lRQK+HauDNMvQHMftVK0IPJrmFYR1XXeR3rFsG+mwgRENaTPTekrEiPFBs+anu492lXqBrZhWTe6BxceCnDI+htvHLJEwjnG/rPehwIA3yQpfVCU8wv21PuYnm9PJZDr5Yzr5cjr5cTr5azr5czp5NZ18D9eyEpCWH+E0JbHn4zjuS7rWwApxnMvtNeNN89OQwQJ6A50b1IIpQ8oh7wCP61kArV4YF3nkzXPftizTPduYEwrXtl3HdszOTaHQTe2dCQUuBDuq1/jP1YKOIhwTP2ZFILGHCrWgagQ9VfcxTXvQxCEV41b5m6X6OmARIFFuakX1B0P1dRKTBDpcbZQDFRkcBaWgXw41pq5yC6ObgHqJ5giCMp0SoT4lkDYdkj08ZoWYKWPd/7ujs2qaiOdQs5xCb6kKhmbbhmlDvW/KgmmhBywLMJCwVN0q/94sDZ9QMjos27nShwelD5yEhFcJ3o+gBb8/tu4hCkvj/2dhoAGAnl5iu74dg0iyAa1BqbsucizT7ziahdtax7YC2w1DbOu4bSHHtfp6v420TsfQ2le+vm4akla36seMOoDDs3zp49A8p3TVMFRzGc7PbtB2GewX0nkh4ocgChnj4spXvoNdmWvvatrr2SzaOPCCQLtAacOQ+l7OCg5CUCP271e/XXz788XvX/zz1csZ55xg7kfegIwB3rI6Fz/9cv7yh/Ovfz2fvPbqoG++O389mQmaQf01ElxBOxIi655snmwCJv04k9CsaJx0Xc3WTjZbJ5tx4Q+2OR59REOxB32to70My8SVk81riF1Da8dLkDlrrbBZE7fZnBexXNQ7vK6u74OMLpfLpUJ4F4V6J2J5dpdT+9pzwOXxmOFTIjGv3Hh+MFEHoD/zrNG2QC1MzZWvIF407nMaeJHVJLBSpiq1igRDmtOGCoqhGWZbs9qGuaajrul0TVO1DEPOWXlfo3Bl7HM2yoE5MU5PC+gSDD6P2n560wPeRHkpgsrx0aO2e+VwNy2qfO8hRfcBHFQnpDGB6YXHUp8swJll2HM4s1wdUONYK5Stzr8P9vxrzKsD8MM9AC1zXph0G5TGMZFjr6RpJU23S9McmGehvERC3k66FijVSmjeH6GRH6EeU3GAi8EiqUHOnNSAypjys55xL6XpnH3+L4jsCGheHAAA对这个字符串进行解码时,使用了URLDecoder.decode,然后使用了Base64.getDecoder().decode()方法,出现Caused by: java.lang.IllegalArgumentException: Illegal base64 character 20
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值