【问题标题】::remote=>true not doing AJAX call:remote=>true 不做 AJAX 调用
【发布时间】:2017-01-18 03:25:56
【问题描述】:

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

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

我有一个表单可以在我的应用程序中创建一些元素,但我希望使用 :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 =&gt; true 提交了其他表单,它们运行良好。我正在使用 Rails 3.0.1 和 Ruby 1.8.7

【问题讨论】:

  • 我的 create 方法也有同样的问题。我只想回复 js 而不是 html,所以我收到 UnknownFormat 错误(Rails 4),原因与您遇到问题的原因相同:即使我的表单也是通过 html 请求的有data-remote="true"。自从你上次看到这个后,你运气好吗?
  • @JakeSmith 不,我正在完成更紧急的任务。如果我设法解决问题,我会放在这里:)

标签: jquery ruby-on-rails ajax


【解决方案1】:

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

更新:

你还需要在你的update方法中检测是否是ajax调用,以便控制器正确处理一切:

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

【讨论】:

  • 我想到了您的答案,这让我重新思考并更改了代码。无论如何,问题是即使有:remote = true,表单也是用HTML提交的。
  • 更新了我对控制器中缺失部分的回答
  • 我试过了,以防万一,但没有运气。主要问题不是控制器错误地处理了请求。 问题是请求是HTML,而不是JSProcessing by EventCriteriaOptionsController#create as HTML应该是Processing by EventCriteriaOptionsController#create as JS。控制器响应 HTML 请求......显然。
  • 我知道,但主要问题不是这个。据我所知,请求头的内容类型应该是 text/javascript 以便像 JS 一样处理。应用程序生成的标头类型(使用 firebug 检查):Content-Type text/html; charset=utf-8。可能理解有误,如有错误请指正。
  • 来自网站的请求是HTTP请求。您正在发布表格。唯一的区别是它是由页面中的 javascript 发布的,而不是由浏览器提交表单。
【解决方案2】:

晚了 3 年,但我也遇到了这个问题。要远程提交 xhr 请求,您需要安装 rails jquery gem。但是,在您的 application.js 文件中,您需要同时要求: //= require jquery //= require jquery_ujs

ujs 是使远程真正与 xhr 请求一起工作的位。头脑。吹。

【讨论】:

  • 太棒了!你拯救了我的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2018-04-27
  • 1970-01-01
  • 2016-04-28
  • 2012-01-06
  • 1970-01-01
相关资源
最近更新 更多