jQuery + Rails + ajaxForm + js.erb 问题

标签 jquery ruby-on-rails ajax ajaxform

我遇到了一个让我抓狂的问题,根据我在网上看到和阅读的所有内容,它应该工作正常。

我在 Rails 应用程序中使用 jQuery,而不是原型(prototype),并使用 ajaxForm 插件通过 ajax 提交一些表单数据。表单数据被提交,相应的 Controller 操作被调用,js 类型的正确的 respond_to block 被调用。

问题的出现是因为 *.js.erb 文件的内容被返回到客户端浏览器并且没有被解释为 javascript。实际上什么也没发生。是的,我已经设置了 dataType: 'script' 但它仍然不起作用。我也尝试过不使用 ajaxForm 插件并在表单提交上手动使用 $.post 函数,但结果仍然相同。

对于一些代码示例,这是我的 ajaxForm 调用:

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script'
});

我还正确设置了 Accepts header ,这工作正常,因为我的 format.js block 正在执行

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

在我的操作 *.js.erb 文件中,我目前拥有的只是一条警报语句,以帮助调试问题,直到我能弄清楚:

alert("action processed successfully");

这在 Firefox 或 Safari 中不起作用。如果我查看 Firebug 控制台,我可以看到警报语句作为 ajax 调用的响应返回,只是客户端没有将其评估为 javascript。

仅供引用,如果重要的话,我正在 Rails 2.3.4 和 jQuery 1.3.2 上运行

最佳答案

我遇到了完全相同同样的问题。您必须手动eval返回的代码。我不记得为什么它没有被评估,但我使用了与你相同的插件,这解决了它。

编辑 1: 阅读 article因为它有助于解决问题。

编辑 2:尝试以下操作:

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script',
  success: evalResponse
});

function evalResponse(responseText, statusText) {
  eval(responseText);
}

here了解更多信息。

关于jQuery + Rails + ajaxForm + js.erb 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504683/

相关文章:

ruby-on-rails - 设计不使用 LDAP 进行身份验证

jQuery.load() 包装器来管理多个请求和 ".loading"CSS 类

ruby-on-rails-3 - 如何在 Rails 中编写 JavaScript 表单验证?

mysql - ThinkingSphinx group_by 导致搜索缓慢

javascript - 滚动到 div 外部将滚动内容

ruby-on-rails - 迁移 Rails 6.0.34 -> 6.1 后,我无法在 config/environments/development.rb 中使用模型

javascript - Python Flask 每 60 秒刷新一次表

jquery - AJAX 请求中未发送授权 header

javascript - JSON数据插入多维数组

javascript - jquery 删除不适用于响应文本