【问题标题】:Data not being POSTed through AJAX request未通过 AJAX 请求发布的数据
【发布时间】:2011-07-16 09:10:32
【问题描述】:

我有这个 AJAX 请求:

$("#searchagain_form").submit(function() { 
    $.ajax({
      type: 'POST',
      url: "/searchforward",
      data: {engine: $("#engine_options").find(".on_engine").text()}
    });
});

这是我的表格:

    <%= form_for :searchagain, :url => {:controller => 'results', :action => 'searchforward'}, :html => { :id => "searchagain_form" } do |f| %>
      <%= f.text_field :search, :value => @search, :id => 'searchagain_bar' %>
      <%= f.submit :value => "search!", :id => 'searchagain_submit'  %>
    <% end %>

但是,检查我的日志,提交表单时数据似乎没有发布到服务器。知道为什么吗?

【问题讨论】:

  • 你应该序列化你的表单数据(因此包括令牌)

标签: ruby-on-rails ruby ajax jquery


【解决方案1】:

您没有取消提交,因此页面将卸载而不是发送 ajax 请求。
return false; 附加到函数中。

但是,尚不清楚 #engine_options .on_engine 是什么类型的元素,如果它是文本输入,请使用 val() 而不是 text()(text() 对于文本输入不应该返回任何内容)。

当它是一个 textarea 时,它将返回元素内的 textNode,而不是任何以后修改的文本。所以对 textarea 也使用 val()。

【讨论】:

  • 是的,你说的第一件事是对的。除了我在表单中提交的数据之外,我实际上还想发送一些数据,所以我意识到对我来说正确的做法是将其传递到隐藏字段中。 #engine_options .on_engine实际上是一个链接。
【解决方案2】:

这里不需要分号:

{engine: $("#engine_options").find(".on_engine").text();}

除此之外,您还可以使用Charles 之类的流量监控器来监控帖子并确保它正在发送您想要的内容。

编辑:

$('#searchagain_form').serialize() 

还会给你一个包含所有表单数据的对象

【讨论】:

  • 所以?数据是否正确发送?
  • 数据未发送。我在我的参数哈希中看不到数据的迹象
  • 你使用过像 charles 这样的网络流量监控器吗?
  • 设置有多难。我不想安装新的东西:/
  • 它很简单,它会让你的生活更轻松。
【解决方案3】:

为什么不在 ajax 参数中添加错误处理程序?

$("#searchagain_form").submit(function() { 
    $.ajax({
      type: 'POST',
      url: "/searchforward",
      data: {engine: $("#engine_options").find(".on_engine").text()},
      error: function(jqXHR, textStatus, errorThrown){
          console.log(errorThrown);
      }
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多