使用 jQuery 和 Ajax 提交 Rails 表单

2024-03-01

编辑:想通了所以问一个相关的问题。

这是我的 JavaScript

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
})

jQuery.fn.submitWithAjax = function() {
    this.submit(function() {
        $.post(this.action, $(this).serialize(), null, "script");
        return false;
    })
    return this;
};

    $('.error').hide();
$("#business_submit").click(function() {
    // validate and process form here

    $('.error').hide();
    var name = $("input#business_name").val();
    if (name == ""  || name == "Required Field") {
        $('#namelabel').show()
        $("#business_name").focus();
        return false;
    }
    var address = $("#business_address").val();
    if (address == ""  || address == "Required Field") {
        $('#addresslabel').show();
        $("#business_address").focus();
        return false;
    }
    var city = $("#business_city").val();
    if (city == "" || city == "Required Field") {
        $('#citylabel').show();
        $('#business_city').focus();
        return false;
    }
    var state = $("#business_state").val();
    if (state == ""  || state == "Required Field") {
        $('#statelabel').show();
        $("#business_state").focus();
        return false;
    }
    var zip = $("#business_zip").val();
    if (zip == ""  || zip == "Required Field") {
        $('#ziplabel').show();
        $("#business_zip").focus();
        return false;
    }
    var phone = $("#business_phone").val();
    if (phone == ""  || phone == "Required Field") {
        $('#phonelabel').show();
        $("#business_phone").focus();
        return false;
    }

    var category = $("#business_business_category_id").val();
    if (category == " - Choose one - ") {
        $('#categorylabel').show();
        $("#business_business_category_id").focus();
        return false;
    }


   $.ajax ({
        type: "POST",
        data: form.serialize()
    });
    return false;
})

.ajax 代码触发我的 create.js.erb 文件,其中包含

$("#new_business").submitWithAjax();
$("#new_business")[0].reset();
$("#new_business").hide();

这是表格下方的表格。

<div id="unapproved">
  <table width="650" align="center" cellpadding="6" cellspacing="0">

    <tr>
      <td width="150"><a class="Contact<%=h @business.id %>" href="#"><%=h @business.name %></a></td>
      <td width="150"><%=h @business.address %></td>
      <td width="100"><%=h @business.business_category.name %></td>
      <td width="200"><%=h @business.description %></td>
      <td width="50"><%= link_to(image_tag('/images/accept.png', :alt => 'Approve'), :id =>@business.id, :action => 'approve') %>
        <a class="Edit<%=h @business.id %>" href="#"><img src="/images/pencil.png" alt="Edit" /></a>
      <%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :confirm => 'Are you sure?', :method => :delete) %></td>
    </tr>
  </table>
</div>

现在我唯一的问题是我的表单下面的表格没有动态刷新。它将数据很好地添加到数据库中,并且所有验证都运行良好。但我必须刷新页面。我尝试添加类似的东西

$("#unapproved").append("<%= escape_javascript(render(:file => 'business')) %>");

但这只是打破了它。


我的猜测(因为您的“提交”按钮不在上面的 HTML 中,所以您的“business_submit”按钮只是一个输入而不是提交按钮。

这段代码:

jQuery.fn.submitWithAjax = function() {
    this.submit(function() {
        $.post(this.action, $(this).serialize(), null, "script");
        return false;
    })
    return this; };

不告诉表单提交。它说当“提交”发生时,去做某事。

来自jQuery 文档 http://docs.jquery.com/Events/submit, commit(fn) 用于“绑定一个函数 到每个匹配的提交事件 元素。提交事件触发时 已提交表格。”

您实际上从未提交过表单。我愿意打赌(不能确定,因为我没有所有代码),您将 SubmitWithAjax 方法更改为:

jQuery.fn.submitWithAjax = function() {
    $.post(this.action, $(this).serialize(), null, "script");
    return false; };

它应该有效。它至少更接近您想要做的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jQuery 和 Ajax 提交 Rails 表单 的相关文章

随机推荐

  • FragmentActivity:无法从 Fragment 转换为派生类

    我正在尝试在 FragmentActivity 中使用 Fragment 如下所示 TutViewerFragment viewer TutViewerFragment getSupportFragmentManager findFragm
  • 如何在 Visual Studio 2010 中将 .cs 文件折叠到 .xaml 文件内?

    如何将我的 ViewModel 文件 cs 文件 折叠到其相应的 View 文件 xaml 文件 文件中 如图所示 我不知道在 Visual Studio 中执行此操作的方法 但您可以在文本编辑器中编辑 csproj 文件 你应该找到这样的
  • 以编程方式快速获取图像文件类型

    我正在从解析中下载带有 PNG 和 JPEG 文件的图像 当图像下载到应用程序时 我需要确定文件类型是什么 以便我可以相应地处理图像 查看了 uiimageview 的 API 并进行了搜索 但无法在 swift 中找到任何解决方案 任何意
  • 具有多个键和关联值的可编码枚举

    我已经看到了有关当所有情况都有关联值时如何使枚举符合 Codable 的答案 但我不清楚如何混合具有和不具有关联值的情况的枚举 如何针对给定情况使用同一密钥的多个变体 如何对没有关联值的情况进行编码 解码 enum EmployeeClas
  • 使用属性调用方法

    我有各种单独的方法 它们都需要执行相同的功能 然后才能继续自己的实现 现在我可以在每个方法中实现这些功能 但我想知道是否有一种方法可以利用attributes去做这个 作为一个非常简单的示例 所有网络调用都必须检查网络连接 public v
  • 即使我清除缓存,.gitignore 也不起作用

    在将初始提交推送到 git 存储库后 我犯了创建 gitignore 文件的错误 我的 gitignore 非常简单 它只包含 node modules 我尝试过以下方法 git rm cached rf git add git commi
  • 如何将按“Enter”键与单击按钮关联起来?

    在我的 swing 程序中 我有一个 JTextField 和一个 JButton 我希望 一旦用户按下 enter 键 JButton 的 actionListener 就会运行 我该怎么做 提前致谢 JRootPane 有一个方法 se
  • Python - 列表字典

    制作列表字典的最佳方法是什么 例如 如果我有列表列表1 列表2并想做一本字典my dict像那样 my dict list1 list1 list2 list2 我发现了this https stackoverflow com questi
  • docker-compose up 不重新创建容器

    我创建了两个容器 一个是 oracle db 一个是 apache tomcat 我使用以下 docker compose 运行它们 version 3 4 services tomcat build tomcat ports 8888 8
  • 运行 StarTeam 2008 Release 2 客户端时出现“无法创建 Java 虚拟机”错误

    为什么 StarTeam 2008 Release 2 Client 没有在我的计算机上正确安装 每当我尝试启动它时 都会收到 无法创建 Java 虚拟机 错误 正如我之前所想 这不是定位 Java 虚拟机的问题 而是内存分配问题 在 St
  • Facebook 聊天机器人 - 如何测试欢迎消息?

    我的聊天机器人运行良好 但我在调试欢迎消息功能时遇到了麻烦 因为它仅在发起对话时显示 尽管我很确定在同事手机上尝试过它不起作用 如何重置我的聊天 以便将我视为与之交互的新用户 这是我目前受欢迎的 PHP 脚本
  • 如果使用 Android 后台服务,Flutter 会停留在“等待观测站端口可用”

    我一直在尝试为 Flutter 编写平台代码来启动后台服务 在这里 我使用了一个最小的例子 没有actual所做的工作表明该应用程序根本无法运行 实际的flutter代码根本没有修改 MainActivity java public cla
  • AnyLogic 计算机处理器需要建议 - 单核速度与核心数量?

    我在一台老式电脑上进行建模 最近获得了一些实验室资金来购买一台新的建模计算机 处理器的选择让我感到困惑 为了获得最佳的 AnyLogic 仿真建模 我应该专注于最大化单核速度还是最大化处理器核心数量 另外 高端显卡有帮助吗 我从我的工程同事
  • 如何使用 Java 或 CMD 获取 PC 硬件信息

    我正在创建一个 Java 桌面应用程序 用于报告 Windows 计算机 XP Vista 和 W7 的性能和统计信息 使用 Java 或命令行如何获取以下信息 制造商 戴尔 惠普 模数 处理器类型 处理器尺寸 系统类型 储存空间 内存总计
  • Android - 使滑动抽屉从左向右滑动

    我已经使用下面的 XML 布局在我的应用程序中实现了 滑动抽屉 我从 androidpeople com 得到这个例子
  • 使用 C# 识别 CPU 架构类型

    我想检查用户运行的是哪个CPU架构 是吗 i386 或 X64 或 AMD64 我想用 C 来做 我知道我可以尝试 WMI 或注册表 除了这两种还有其他办法吗 我的项目目标是 NET 2 0 让我来到这里的是检查 32 位与 64 位操作系
  • Python/Firefox 无头抓取脚本中的“无法解码来自木偶的响应”消息

    美好的一天 我在这里和谷歌上进行了大量搜索 但尚未找到解决此问题的解决方案 场景是 我有一个 Python 脚本 2 7 它循环访问多个 URL 例如 想想亚马逊页面 抓取评论 每个页面都有相同的 HTML 布局 只是抓取不同的信息 我将
  • 如何在 webdriverio 中结束浏览器会话来关闭浏览器?

    我有以下测试用例 在wdio conf js afterTest async function test context error result duration passed retries await browser end Erro
  • 如何通过名称调用私有函数

    如何通过名称调用函数 实际上我知道如何按名称调用函数 但我找不到所需的范围 所以现在我必须使用this get 小部件名称 它适用于 get publishedBuildsWidget1但我想让函数成为私有函数 所以我想按名称调用 get
  • 使用 jQuery 和 Ajax 提交 Rails 表单

    编辑 想通了所以问一个相关的问题 这是我的 JavaScript jQuery ajaxSetup beforeSend function xhr xhr setRequestHeader Accept text javascript jQ