【问题标题】:rails and jquery: script displayed instead of executionrails 和 jquery:显示脚本而不是执行
【发布时间】:2009-09-16 20:27:51
【问题描述】:

我在 Rails 中使用 jQuery 时遇到了一点麻烦。

我想为特定列表项调用destroy 方法,然后通过ajax 从列表中删除它。我的代码很简单:

# _web_profile.html.erb - The partial containing the link to destroy:
<%= link_to 'Remove', web_profile, :method => :delete, :class => 'remove_button' %>

# The ajax hijacking
$('.remove_button').live('click', function() {
  $.ajax({ type: 'delete', url:  this.href });
  return false;
});

# In my controller
format.js { render(:update) { |page| page.remove "web_profile_#{id}" } }

好的,基本上就是这样。当我按下按钮时,一切正常,但我没有执行脚本,而是在浏览器中得到了一个文本输出:

# Browser output
try {
  jQuery("#web_profile_12").remove();
} catch (e) { 
  alert('RJS error:\n\n' + e.toString()); 
  alert('jQuery(\"#web_profile_12\").remove();'); throw e 
}

知道为什么不执行这个漂亮的 javascript 代码吗?我已经尝试将 dataType 添加到 ajax 请求中。

感谢和最好的问候, 乔

【问题讨论】:

  • 你有原型吗?你解决了冲突吗?
  • 对不起,听起来很愚蠢,但您没有错过
  • 不包括原型,脚本标签在那里,为了可读性我删除了它。
  • 你能不能用 bind 而不是 live 来尝试,只是为了排除 jQuery 的异常?
  • 我也试过了——没有任何效果! ://

标签: javascript jquery ruby-on-rails browser


【解决方案1】:

为什么“类型”设置为“删除”?它应该设置为“POST”,dataType 设置为“script”。由于跨浏览器兼容性问题,应使用变通方法将操作指定为 RESTful 删除。数据应将“_method”参数设置为“delete”。

我建议安装jrails 并使用link_to_remote 和其他Rails 助手。它们生成正确的 JS 代码。因此,您可以了解如何构建正确的 Rails Ajax 请求。

【讨论】:

  • 嗨,格雷格,我会试试你的建议! jrails 实际上是安装的,但我喜欢以一种不显眼的方式编写我的应用程序。
【解决方案2】:

您必须在$.ajax() 调用中将类型设置为“脚本”,或者将该调用替换为$.getScript()

【讨论】:

    猜你喜欢
    • 2014-04-29
    • 2014-02-03
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多