Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails-无法在失败的ajax表单提交上显示错误_Javascript_Ruby On Rails_Ajax_Ruby On Rails 4 - Fatal编程技术网

Javascript Rails-无法在失败的ajax表单提交上显示错误

Javascript Rails-无法在失败的ajax表单提交上显示错误,javascript,ruby-on-rails,ajax,ruby-on-rails-4,Javascript,Ruby On Rails,Ajax,Ruby On Rails 4,我已经尝试了一段时间了,但是当用户通过ajax提交表单并且表单失败时,无法显示任何错误(我也无法显示成功消息,但这没什么大不了的) 这是我的 形式 <ul id="errors"> </ul> <%= form_for([@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, :authenticity_toke

我已经尝试了一段时间了,但是当用户通过ajax提交表单并且表单失败时,无法显示任何错误(我也无法显示成功消息,但这没什么大不了的)

这是我的

形式

<ul id="errors">

</ul>

<%= form_for([@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, :authenticity_token => true) do |f| %>
   <%= render 'shared/error_messages', object: f.object %>

   <%= f.label :name, "Key name" %>
   <%= f.text_field :name %>

    <%= f.select :key_type, [['Value', 1], ['Text', 2], ['Image', 3]] %>

   <%= f.submit "Next", :value => "Add New Key"  %>
<% end %> 
javascript

$(document).on "ajax:error", "form", (evt, xhr, status, error) ->
   errors = xhr.responseJSON.error
   for message of errors
      $('#errors ul').append '<li>' + errors[message] + '</li>'
$(文档)。关于“ajax:error”、“form”(evt、xhr、status、error)->
errors=xhr.responseJSON.error
错误信息
$(“#errors ul”)。附加“
  • ”+错误[消息]+”
  • '
    表单不在其正常的键/创建视图中,以防代码中的某些内容使您感到困惑,这可能会解释为什么会这样


    不知道从这里去哪里,我基本上复制了教程中的编码。我已经看过并尝试了一些教程,也看到了一些stackoverflow问题,这些基本上是我所需要的,但不起作用。不知道下一步该怎么办

    此处可能出现错误:

    $('#errors ul').append '<li>' + errors[message] + '</li>'
    

    不知道下一步该怎么办

    你需要调试

    您的问题概述可以通过以下方式解决:

  • 查看通过开发控制台发送的请求/响应
  • 确定流中是否有任何错误(如我上面提到的)
  • 确保您的控制器给出适当的响应
  • 我调试的方法如下:

    <%= form_for [@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, authenticity_token: true, data: { type: :json }  do |f| %>
    
    --

    控制台

    你需要确保你知道你的应用程序中发生了什么;你也有所有的工具来做这件事。首先,您需要确保知道正在发送哪些请求。通过网络来实现这一点

    在Firefox和Chrome中

    Right Click > Inspect Element > Console > "Network" (tab)
    
    当您进入此选项卡并单击远程表单上的“提交”时,您将看到请求(和响应)出现。您可以使用此选项确定问题所在:

    你可以读更多

    -

    JS

    第二,你的流量可能会有问题

    使用上述代码,您只发送了一个
    JS
    请求(而不是
    JSON
    )。如果您想要
    JSON
    ,则必须按如下方式设置
    类型

    <%= form_for [@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, authenticity_token: true, data: { type: :json }  do |f| %>
    
    
    
    您还需要确保JS的格式正确(我的第一点)

    最终,我无法梳理每一行代码——您需要使用我概述的工具来了解可能存在的问题

    -

    控制器

    最后,最后一个问题可能是控制器

    虽然不太可能,但您可能没有发送格式正确的请求等;导致控制器发送错误响应

    我强烈建议您使用Rails控制台查看出了什么问题:


    每次向应用程序发送请求时,控制台日志都应记录该请求。因此,如果您有任何问题,您需要检查记录了哪些问题。如果你发布了这篇文章,它会让你更好地了解正在发生的事情

    哇,这是一个很棒的答案!我来试试看。你帮了我很多忙。我还有一个问题,我花了一整天都没有运气。它是一个嵌套的表单,不知道什么时候停止工作(测试通过)。我不知道是什么原因导致它现在只在表单提交上传递id,其他什么都没有
    Right Click > Inspect Element > Console > "Network" (tab)
    
    <%= form_for [@guide, @category, @key], url: guide_categories_keycreate_path(category_id: params[:id]), remote: true, authenticity_token: true, data: { type: :json }  do |f| %>