JQuery несколько запросов Ajax - PullRequest
       28

JQuery несколько запросов Ajax

0 голосов
/ 15 сентября 2011

Этот фрагмент кода позволяет отбрасывать несколько файлов, перетаскиваемых в коробку.Программа чтения файлов создает большой двоичный объект для каждого файла, а затем КАЖДЫЙ файл должен быть отправлен на сервер с помощью ajax rq:

$.each( e.dataTransfer.files, function(index, file){
    var fileReader = new FileReader();

    //..generate BLOB from file 


    fileReader.onloadend = (function(file) {                                
        return function(e) {                            
            uploadfilelist.append('<li>' + file.fileName + '</li>');
            //send every single file to server
            var destfoldername=CURRENTPATH;
            var uploadfilename=file.fileName;

            var fd = new FormData();
            fd.append("param1", destfoldername);
            fd.append("param2", uploadfilename);
            fd.append("param3", blob);

            $.ajax({
                type:"POST",
                url:"url",
                data:fd,
                contentType: false,
                processData: false,             
                beforeSend:function (xhr){ 
                    //custom headers
                },  
                success: function(data, textStatus, jqXHR){

                },
                complete: function(jqXHR){    
                    alert("State after complete: " + jqXHR.statusText);                 
                }           
            });
        };
    })(file);
    fileReader.readAsBinaryString(file);
}

ПРОБЛЕМА: внутренний сбой сервера при получении следующего большого двоичного объекта, но без обработки предыдущего.

Я нашел еще один пост, обсуждающий это: Как сделать все вызовы AJAX последовательными? «Последовательный» запрос с использованием async: false не является опцией, он блокирует множество других вещей...

РЕШЕНИЕ: ???Вызовите ajax forfile1, когда вызов будет завершен, вызовите ajax для file2, ... вызовите ajax для file-n

Я действительно хотел бы использовать JQ Deferred (http://api.jquery.com/category/deferred-object/), например, как описано здесь: http://api.jquery.com/jQuery.when/

$.when($.ajax(???how to refer to THIS ajax call).done(function(){
//call this ajax for the next file again or use $.ajax(code).then()?
});  

Мне очень жаль, но я не знаю, как сделать это правильно.

Спасибо за любые предложения! Ч.

Ответы [ 2 ]

0 голосов
/ 25 октября 2014

Вы, конечно, можете поставить их в очередь без плагина, решив следующее обещание

$.ajax(/*options*/)
.then(function(res) {
  // do something with result
  // call 2
  return $.ajax(/* options */);
})
.then(function(res) {
  // call 3
  return $.ajax(/* options */);
})  // and so on
.fail(function(err) {
  // catch any error from any ajax call
});

Это почти то же самое, что и вложение обратных вызовов с дополнительным преимуществом читабельности и перехвата всех ошибок:

0 голосов
/ 15 сентября 2011

Ну, есть плагин очереди плагин:

http://plugins.jquery.com/project/ajaxqueue

Это написано самим Джоном Резигом.

...