【问题标题】:jQuery + Rails + ajaxForm + js.erb problemjQuery + Rails + ajaxForm + js.erb 问题
【发布时间】:2010-12-03 01:04:51
【问题描述】:

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

我在 Rails 应用程序中使用 jQuery 而不是原型,并且正在使用 ajaxForm 插件通过 ajax 提交一些表单数据。表单数据提交正常,相应的控制器操作调用正常,js 类型的正确响应块调用正常。

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

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

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

我也正确设置了接受标头,这工作正常,因为我的 format.js 块是正在执行的块

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 上运行

【问题讨论】:

    标签: jquery ruby-on-rails ajax ajaxform


    【解决方案1】:

    我遇到了 EXACT 同样的问题。您必须手动eval 返回的代码。我不记得为什么它没有得到评估,但我使用的插件和你一样,这修复了它。

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

    编辑 2: 尝试以下操作:

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

    查看here 了解更多信息。

    【讨论】:

    • 你能详细说明你的意思吗?怎么评价?
    • 感谢您的链接。我在全局 $.ajaxSetup 中添加了 dataType 选项,它似乎已经解决了这个问题。奇怪的是,内联 dataType 选项没有任何区别,但感谢您的帮助。
    • 很高兴你发现出了什么问题,尽管我一直在改变我的答案 =P
    • 我们可以在这里弄清楚... eval 是否足够? +1,在所有情况下。
    • 所以,我什至没有尝试上面 Topher 代码中的 evalResponse 方法。我只是将 dataType: "script" 选项添加到我的 $.ajaxSetup() 全局方法中。我不知道为什么,但这使它起作用。出于某种原因,ajaxForm 函数中的 inline dataType: "script" 选项没有被浏览器识别
    猜你喜欢
    • 2011-01-28
    • 1970-01-01
    • 2011-07-10
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多