jQuery + Rails + ajaxForm + js.erb问题

时间:2009-10-01 15:34:49

标签: jquery ruby-on-rails ajax ajaxform

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

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

问题出现在* .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,如果这很重要

1 个答案:

答案 0 :(得分:2)

我遇到了 EXACT 同样的问题。您必须手动eval返回的代码。我不记得究竟为什么它没有被篡改,但我使用的是与你相同的插件,并修复了它。

修改1: 正在阅读article,因为它有助于解决问题。

编辑2 :请尝试以下操作:

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

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

查看here了解更多信息。