2010-12-30 5 views
0

У меня есть следующая функция. Эта функция вызывается с помощью setTimeout по форме submit.Повторное использование переменной внутри jquery.ajax

function get_progress(fileID, filename) { 
$.ajax({ 
    url: filename, 
    type: 'HEAD', 
    success: function() { 
     $.ajax({ 
      type: 'POST', 
      url: 'read_file.php', 
      data: 'filename=' +filename, 
      success: function(html) { 
       document.getElementById(fileID).innerHTML = html + ' <img src="images/loading.gif" />' 
       setInterval("get_progress(fileID,filename)",400); 
      } 
     }); 
    } 
});} 

Я столкнулся с ошибками, как только setInterval запускается при успешном завершении. Похоже, что fileID и filename - пустые переменные, несмотря на то, что они имеют значения до того, как код достигнет состояния успеха.

Почему это происходит? Должен ли я назначать их как глобальные переменные?

+0

Быстрый (не имеющий отношения) вопрос: почему бы не использовать jQuery для вашей функции успеха тоже? например '$ ('#' + fileID) .append ('');'? – NickAldwin

+0

Возможный дубликат [Использование метода setInterval и запрос jQuery alternate] (http://stackoverflow.com/questions/4562399/usage-of-setinterval-method-and-asking-for-jquery-alternate) – Quentin

+0

@David Dorward : как это может быть дубликат? Моя проблема заключается в доступе к переменной внутри функции ajax, в то время как эта ссылка, которую вы вставили, имеет отношение к setinterval – Kyle

ответ

2

Это не работает, потому что setInterval со строкой оценивает код в глобальном масштабе. Вы должны сделать это с помощью анонимной функции вместо, что создает замыкание:

setInterval(function() { 
    get_progress(fileID,filename); 
} ,400); 

Из MDC documentation for window.setInterval:

Используя этот синтаксис [строку кода] не рекомендуется по тем же причинам, используя eval()

+0

спасибо! работает :) – Kyle

2

Попробуйте это:

success: function(html) { 
    $('#' + fileid).append('<img src="images/loading.gif" />'); 
    setInterval(function() { 
     get_progress(fileID,filename); 
    }, 400); 
} 
Смежные вопросы