Rails не рендерит мой файл .js.erb - PullRequest
2 голосов
/ 10 июля 2011

У меня есть этот код в моем 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  

Я думаю, что это может быть связано с тем, что я обрабатываю кучу фоновых заданий с помощью Resque перед вызовом respond_to?

Как я могу получить файл create.js.erb для запуска?

Ответы [ 2 ]

0 голосов
/ 10 июля 2011

Поскольку создается впечатление, что вы используете jQuery из синтаксиса запроса AJAX, вы можете привязать свой метод к событию загрузки DOM:

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

Это предотвратит выполнение pollingAJAX () до окончания всего Javascriptфайл был проанализирован, что позволило этой функции найти его определение.

Подробнее здесь: http://www.learningjquery.com/2006/09/introducing-document-ready

0 голосов
/ 10 июля 2011

ОБНОВЛЕНИЕ: убедитесь, что вы на самом деле включаете свой JavaScript с тегом <script>, иначе он никогда не будет загружен.

Переместите вызов pollingAJAX() в после , чтофункция была определена.При условии, что он (лексически) анализирует нормально, JavaScript выполняется линейно, как он интерпретируется, а не компилируется и затем выполняется, поэтому функция pollingAJAX() еще не существует, где вы поставили вызов.

Кроме того,всегда просматривайте исходный код в браузере, чтобы убедиться, что .erb обработан так, как вы хотели.И используйте консоль JavaScript в вашем браузере для обнаружения любых ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...