0

フォームの送信時にエラーが発生しました。この形式は次のように定義されます:

<% remote_form_for @my_object do |f| %>
  ...
<% end %>

生成されるHTMLは次のとおりです。

<form action="/my_objects" id="new_my_object" method="post"
   onsubmit="new Ajax.Request('/customers', {
      asynchronous:true,
      evalScripts:true,
      parameters:Form.serialize(this)
   }); return false;">
   ...
</form>

私はこのJSエラーに遭遇しました:

Uncaught ReferenceError: Ajax is not defined 

どこかでプロトタイプエラーを読んだのですが、間違いがわかりません。

私の構成はRails2.3.16、Ruby 1.8.6、jquery 1.9.1、jquery-ui1.10.2です。

4

3 に答える 3

1

デフォルトでは、rails 2.x(およびそれ以前のバージョン)で、PrototypeのJSコードを生成します(javascript_helperおよびprototype_helperを参照) 。

Rails 2.xでjQueryコードを生成するには、 rails 2.x.用のjrailsプラグインを追加します。これにより、remote_form_forやlink_to_remote、jQueryなどの同じRailsヘルパーを使用できるようになります。

jrails.jsのこの部分は、jquery1.9で廃止される可能性があります。

(function($) {
  $.ajaxSettings.accepts._default = "text/javascript, text/html, application/xml, text/xml, */*";
})(jQuery);

次のコードに置き換えてください:

$.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
  options.beforeSend = function () {
    jqXHR.setRequestHeader("accept", '*/*;q=0.5, ' + $.ajaxSettings.accepts.script);
    if ($.isFunction(originalOptions.beforeSend)) originalOptions.beforeSend();
  };
});

コントローラーでajaxリクエスト検出を機能させるには:

def my_action
  respond_to |format|
    format.js { ... }
    format.html { ... }
  end
end
于 2013-03-25T13:36:24.797 に答える
0

JQueryを使用する場合は、次のことを試してください。

<%= form_for @my_object, :html => {:method => "post" }, :remote => true do |form| %>

<% end %>

Railsガイドラインも確認してください:http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html

于 2013-03-25T14:04:11.873 に答える
0

私はこれがあなたの問題に対する答えではないことを知っています。remote attributeしかし、これらのタイプの混乱を避けるために、Railsの代わりにJQueryAJAXを使用しています。JQueryでAJAXを使用すると非常に便利です。

<% form_for @my_object do |f| %>
  ...
<% end %>

<script>
  $(function(){
    $('#form_id').submit(function(){
      $.post($(this).attr('action'), $(this).serialize(), function(data, status){
        alert(status)
      }) 
    })
  });
</script>
于 2013-03-26T18:10:46.623 に答える