Rails没有呈现我的.js.erb文件

时间:2011-07-10 00:14:26

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

我的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();
            }    
        }
    });
}

由于我的create.js.erb文件未呈现,因此未触发此AJAX请求。我的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文件?

2 个答案:

答案 0 :(得分:0)

更新:请确保您的JavaScript实际上包含<script>标记,否则永远不会加载。

在定义了该函数后,将pollingAJAX()的调用移动到。如果它(词法上)解析好,JavaScript会在解释时线性执行,而不是编译然后执行,因此pollingAJAX()函数在您调用调用的位置尚不存在。

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

答案 1 :(得分:0)

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

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

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

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