2015-06-01 3 views
2

Я разрабатываю модули для старого сайта Drupal 6. Текущая задача - прервать создание предварительного просмотра пользовательских плакатов. Для этого пользователь может загрузить свой логотип и изменить текст. Форма, содержащая эту информацию, отправляется, и предварительный просмотр отображается через ahah.Abort fileupload with jQuery 1.2

Согласно несколько учебникам я должен сделать это:

var xhrPool = []; 
$(document).ajaxSend(function(e, jqXHR, options){ 
    console.log(jqXHR); 
    xhrPool.push(jqXHR); 
}); 
$(document).ajaxComplete(function(e, jqXHR, options) { 
    xhrPool = $.grep(xhrPool, function(x){return x!=jqXHR}); 
}); 

и позже:

function abortAll() { 
    hideEverything(); 
    for (var i = xhrPool.length - 1; i >= 0; i--) { 
    xhrPool[i].abort(); 
    }; 
} 

В случае, если я ввод информации во всех областях, кроме FileUpload, журнал возвращает действительный XmlHttpRequest Объект, который может быть прерван должным образом. Но если я загружаю файл, то .ajaxSend не содержит допустимого объекта XmlHttpRequest. Пример:

Returned object

Этот объект не содержит метод .abort() и вызывает «метод не найден» ошибка. Итак, как я могу прервать этот звонок?

jQuery Version 1.2.6 и не может быть обновлен. Решение должно быть совместимо с браузером.

ответ

2

рабочий раствор может быть следующее (я случайно имел такую ​​же проблему с Drupal 6, Jquery 1,2):

for (var i = xhrPool.length - 2; i >= 0; i--) { 
    if (xhrPool[i] instanceof XMLHttpRequest) { 
    xhrPool[i].abort(); 
    } else { 
    window.stop(); 
    } 
}; 

В этом случае вы просто проверить, если у вас есть надлежащее XMLHttpRequest, и сделать это нормальный путь, если да. И если вы этого не сделаете, вы просто прервите ВСЕ выполняемые Запросы.

Это не идеальный вариант, но он работает примерно в 90% случаев.

+0

Работает как шарм :) –