Наличие двух вызовов $.ajax() в одном скрипте

Я хочу показать некоторую информацию о ходе выполнения процедуры на стороне сервера (которая на самом деле является перекодированием ffmpeg). Лучшим способом, который я придумал, было использование двух разных вызовов $.ajax() в myscript следующим образом:

1) при отправке формы (что вызовет перекодирование) один $.ajax() начнет перекодирование следующим образом:

   $.ajax({  
    type: "GET",  
    url: "runffmpeg.php",  
    data: dataString,  
    success: function(data, textStatus, XMLHttpRequest) {  
            //clearInterval(repeat);
            location.reload(); 
        }});

2) Затем второй вызов $.ajax() начнет отслеживать размер результирующего файла, чтобы информировать посетителя о прогрессе, например:

    $.ajax({  
        type: "GET",  
        url: "checkprogress.php",  
        data: dataString,  
        success: function(data, textStatus, XMLHttpRequest) {                   
                $('#submitted').html(data);
            }
    });

На самом деле этот вызов должен быть сделан в течение setInterval с периодом в 1 секунду, чтобы показать прогресс.

Конечно, это не работает (а иначе почему я должен это публиковать), и я не могу найти никаких упоминаний о наличии двух вызовов ajax в одно и то же время.


person Achilles    schedule 15.04.2010    source источник
comment
Вы получаете ошибки? Что именно не работает?   -  person marcgg    schedule 15.04.2010


Ответы (2)


Вполне допустимо иметь два вызова ajax одновременно. Однако я бы не использовал setInterval, так как вы можете столкнуться с несколькими вызовами checkprogress.php, если для возврата требуется больше секунды. Вам лучше, чтобы метод успеха запускал новый запрос ajax, возможно, после тайм-аута, например:

function checkProg(){
  $.ajax({  
      type: "GET",  
      url: "checkprogress.php",  
      data: dataString,  
      success: function(data, textStatus, XMLHttpRequest) {                   
              $('#submitted').html(data);
              if (/* not yet complete */) {
                setTimeout(checkProg,500);
              }
          }
  });
}
person Graza    schedule 15.04.2010

Существует ограничение на количество одновременных активных запросов ajax. Это зависит от браузера и должно быть близко к 3. Я считаю, что можно одновременно активировать два запроса, но это не рекомендуется.

Я предлагаю перепроектировать код вашего сервера, чтобы он немедленно отвечал на отправку формы, подтверждая получение команды. Затем используйте опрос для отображения прогресса.

person kgiannakakis    schedule 15.04.2010