Вопрос по jquery, ajax, javascript, file-upload – Как отменить загрузку файла, начатую ajaxSubmit () в jQuery?

6

У меня есть код, подобный следующему:

UploadWidget.prototype.setup_form_handling = function() {
    var _upload_widget = this;
    $('form#uploader')
    .unbind('trigger-submit-form')  // This might be our company's own method
    .bind('trigger-submit-form', function() {
        var $form = $(this);
        $form.ajaxSubmit({
            dataType: 'json',
            success: function(data, status, xhr, form) {
                // ...
            },
            error: function(xhr, status, errorThrown) {
                // ...
            }
        });
        return false;
    });
};

Есть ли способ использовать, скажем, кнопку сброса формы, чтобы отменить процесс загрузки? Или мне придется перейти на текущую страницу (обновить), чтобы остановить все?

Я попытался создать переменную, сохраненную объектом UploadWidget, в которой хранится значение jqXHR (и вызываяvar _upload_widget.jqXHR = $form.ajaxSubmit({ ... });), но я не думаю, что делаю это правильно.

Я обнаружил, что этот виджет создает iFrame после инициализации загрузки и использует его для процесса загрузки. Я могу удалить iFrame, но файл все еще загружен полностью, в фоновом режиме. TerranRich

Ваш Ответ

4   ответа
2

var form = $('#myForm').ajaxSubmit({ ... });
var xhr = form.data('jqxhr');
....
$('#cancel').on('click', function(){
    xhr.abort();
});

SRC -https://github.com/malsup/form/issues/221

10

jQuery.ajax(), ajaxForm() а такжеajaxSubmit() плагина формы jQuery не возвращает объект jqXHR. Есть и другие способы получить объект jqXHR:

data() method on the form object (easiest way)

ajaxSubmit() возвращает объект формы. Вы можете позвонитьdata() метод для этого объекта формы, чтобы получить объект XHR:

var form = $('#myForm').ajaxSubmit({ ... });
var xhr = form.data('jqxhr');

Тогда позвониxhr.abort() когда вы хотите прервать загрузку.

Эта функциональность была добавлена в декабре 2012 года; увидетьвыпуск 221, (Ответ shukshin.ivan был первым, кто указал на это.)

beforeSend callback (for jQuery Form versions before December 2012)

В добавок кпараметры, перечисленные на сайте плагинов формы jQuery, ajaxForm() а такжеajaxSubmit() также возьмет любой изПараметры jQuery.ajax (), Одним из вариантов являетсяbeforeSend обратный вызов, и подпись обратного вызоваbeforeSend(jqXHR, settings).

Итак, укажитеbeforeSend функция обратного вызова, и объект jqXHR будет передан в качестве первого параметра этого обратного вызова. Сохраните этот объект jqXHR, и затем вы можете вызватьabort() на этот объект jqXHR, когда вы хотите прервать загрузку.

Error: User Rate Limit Exceeded
0

var myForm  = null; 
myForm = $('#myForm').ajaxSubmit({
               url: ajaxUrl,
               beforeSubmit : function() {
                   if(myForm != null)
                      myForm.data('jqxhr').abort();
                   },
               ...
          });

Это остановит ваши предыдущие запросы ajaxSubmit.

-1

Пытаться

window.stop();

который имитирует нажатие кнопки остановки. Не совсем уверен, что IE нравится это все же. Для IE вы можете попробовать:

document.execCommand('Stop');

Похожие вопросы