【问题标题】:Rails is not rendering my .js.erb fileRails 没有呈现我的 .js.erb 文件
【发布时间】:2011-07-10 00:14:25
【问题描述】:

我的create.js.erb 文件中有这段代码:

pollingAJAX();

function pollingAJAX() {

    $.ajax({
        method: "POST",
        url: "/status",
        data: {uuids: '<%= @uuid_hash.to_json %>'},
        },
        success: function(data){
            var obj = $.parseJSON(data);
            if(obj.isDone == "yes"){

            }else{
                obj.each(function(result) { 
                  if(result.status == "completed"){
                     $('a[href="#{result.url}"]').html('');
                  }
                });
                pollingAJAX();
            }    
        }
    });
}

这个 AJAX 请求没有被触发,因为我的 create.js.erb 文件没有被渲染。我的create 操作中有此代码:

result['items'].each do |r|
 # escaped_url = URI.escape(r['link'], Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")).gsub("%","-")
  @site_array << r['link']
  if Result.where(:link => r['link']).present?
  else  
    job_id = ImageGenerator.create(:url => r['link'])
    @uuid_hash[r['link']] = job_id
  end   
end
respond_to do |format|
  format.html
  format.js
end  

我认为这可能与我在调用 respond_to 之前使用 Resque 处理一堆后台作业有关?

我怎样才能让我的create.js.erb 文件被触发?

【问题讨论】:

  • @Murali 好点,我发布了动作中的相关代码

标签: ruby-on-rails ajax ruby-on-rails-3 jquery


【解决方案1】:

更新:确保您的 JavaScript 确实包含 &lt;script&gt; 标记,否则将永远不会加载。

pollingAJAX() 的调用移动到该函数已定义。如果它(词法上)解析正常,JavaScript 在解释时线性执行,而不是编译然后执行,所以 pollingAJAX() 函数在你放置调用的地方还不存在。

此外,请始终在浏览器中查看您的源代码,以确保 .erb 已按照您的预期方式进行处理。并使用浏览器中的 JavaScript 控制台来检测任何错误。

【讨论】:

  • 你是如何将它包含在你的 HTML 中的?
  • create.js.erb。它不只是神奇地进入您的 HTML。您需要将其包含在 &lt;script&gt; 标签中;)
  • 我一直认为如果你有一个与你的操作同名的.js.erb 文件,rails 会自动渲染它......我很困惑:P
  • 我从未见过,但你可能是对的。这听起来确实像 Rails 会尝试做的事情,但这样做会很危险,因为排序可能很重要。
  • 其实也没办法。如果这样做,您的请求将不得不执行两次,这会产生副作用。
【解决方案2】:

由于您似乎在 AJAX 请求语法中使用 jQuery,您可以将您的方法绑定到 DOM 加载事件:

$(function() {
  pollingAJAX();
});

这将阻止 pollingAJAX() 直到整个 Javascript 文件被解析后才执行,从而允许该函数找到它的定义。

在此处查看更多信息:http://www.learningjquery.com/2006/09/introducing-document-ready

【讨论】:

    猜你喜欢
    • 2015-04-19
    • 2018-03-18
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多