:remote => true不执行AJAX调用

时间:2014-01-08 11:56:49

标签: jquery ruby-on-rails ajax

编辑:我稍微更改了代码。

我知道这是一个重复的问题,但我无法找到适合我的问题。我想我错过了什么,但我无法猜到是什么。

我有一个表单可以在我的应用中创建一些元素,但我希望使用:remote => true执行该表单

events/edit.html.erb中呈现的表单。此表单用于创建event_criteria_options

<%= form_for(@event_criteria_option, :remote => true) do |f| %>    
... 
<% end %>

这是event_criteria_options_controller.rb

中的创建操作
def create
  @event_criteria_option = EventCriteriaOption.new(params[:event_criteria_option])

  respond_to do |format|
    if @event_criteria_option.save
      format.html { redirect_to edit_event_path(Event.find(session[:event_id]), :notice => 'Event criteria option was successfully created.') }
      format.xml  { render :xml => @event_criteria_option, :status => :created, :location => @event_criteria_option }
      format.js 
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @event_criteria_option.errors, :status => :unprocessable_entity }
      format.js 
    end
  end
end

和名为create.js.erb

的js.erb文件
$('#show_event_criteria').html('<%=raw escape_javascript(render(:partial => "show_event_criteria")) %>');
页面中包含

rails.jsapplicationl.jsjquery.js个文件,但提交表单时正在进行HTML调用,而不是AJAX 。我检查了HTML代码,表单中存在data-remote="true"。我在应用中使用:remote => true提交了其他表单,但效果很好。我正在使用Rails 3.0.1和Ruby 1.8.7

2 个答案:

答案 0 :(得分:2)

我相信您的javascript应该在update.js.erb,因为这是您的表单发布到的动作?

<强>更新

您还需要在更新方法中检测它是否是ajax调用,以便控制器正确处理所有内容:

if request.xhr?
  # respond to Ajax request
else
  # respond to normal request
end

答案 1 :(得分:0)

晚会结束了3年,但我也遇到了这个问题。对于远程true提交xhr请求,您需要安装rails jquery gem。但是,在您的application.js文件中,您需要同时要求: func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { }

ujs是使xhr请求远程真正工作的位。心神。吹。