2011年6月21日火曜日

remote_functionでAjax実装

function copy_memo(){
  <%= remote_function(:url => {:action => "copy_memo"}, 
                      :complete => "$('memo_area').value = request.responseText",
                      :with =>"'year='+$('year').value+
                '&month='+$('month').value+
                '&day='+$('day').value+
                                '&user='+$('user').value") %>
}


<input type="button" name="button" value="<%=l('copy_memo')%>" 
    onclick="copy_memo()" >


上のremote_functionで、下記を生成してくれます。
function copy_memo(){
new Ajax.Request('/xxx/copy_memo', 
                 {asynchronous:true, 
                  evalScripts:true,
                  onComplete:function(request){$('memo_area').value = request.responseText}, 
                  parameters:'year='+$('year').value+
                             '&month='+$('month').value+
                             '&day='+$('day').value+
                             '&user='+$('user').value +
                             '&authenticity_token=' +
                              encodeURIComponent('e2uxmpaqqD3l+bMWYOm3r+Yl7KKJuy4WbyNea1Wsc1E=')})
}

Rails2.3.11(あたり?)からCSRF対応で、authenticity_token が自動的にパラメータに追加されるようになったそうです。

remote_functionを使ってない場合は自分で実装を追加する必要があるのでremote_functionを利用するのが便利ですね。
最初は、remote_functionを使わずに実装していたのでログイン情報が消えてハマりました…。

ちなみにパラメータを渡すときは上記のように:with を使います。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。