【问题标题】:Loading non-RJS javascript via ajax in Rails在 Rails 中通过 ajax 加载非 RJS javascript
【发布时间】:2010-05-20 15:44:36
【问题描述】:

我编写了一个 Rails 模块,它可以为 Google 地图生成一些 Javascript。当用户在网页上进行更改时,我使用observe_field 回调服务器以重新生成地图的 Javascript(不更新整个页面)。我无法找到将新 Javascript 插入页面的好方法。我试过了

<div id='my_div_1'>div1</div>
<%= 
  update_page_tag do |page|
    page.replace_html 'my_div_1', "<script>alert('hi');</script>"
  end
%>

但似乎replace_html 仅适用于非脚本 HTML。当内容包含结束 &lt;/script&gt; 标记时,它会窒息。

这是一个我认为是问题根源的页面:http://www.wwco.com/~wls/blog/2007/04/25/using-script-in-a-javascript-literal/

【问题讨论】:

    标签: javascript ruby-on-rails ruby ajax prototypejs


    【解决方案1】:

    这是我尝试过的一种有效的方法。

    我在页面中添加了一个 observe_field,然后使用原型的 Ajax.Updater 来获取地图的 javascript。它大约有 95% 的时间有效,但我不相信它可以解决最后 5% 的问题。下载并执行 javascript 后,它会调用下载中定义的全局 init_map 函数。

    <% observe_field(:id_of_field_to_watch, 
    :function => "
    new Ajax.Updater('map_id', '/filter/map',   
    { 
        evalscripts: true,
        onComplete: function() { init_map() }
    }); 
    ")
    %>
    

    【讨论】:

      【解决方案2】:

      我最终做的是摆脱动态 javascript,而是将地图设置为由 json 数据结构驱动。因此,当地图的标记发生变化时,我会通过 rails replace_html 方法下载一些 json 并将它们加载到地图中。

      【讨论】:

        猜你喜欢
        • 2013-01-10
        • 1970-01-01
        • 2013-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多