Никогда не оканчивающееся сообщение «Connecting» после отправки формы AJAX

У меня есть класс, который позволяет отправлять формы с вводом типа файла через AJAX. Он создает скрытый элемент IFRAME , изменяет свойство form target таким образом, что он передает в IFRAME , передает форму, а затем изменяет целевой объект обратно в то, что он был. Он также добавляет событие onLoad в IFRAME , чтобы получить обратный вызов. Функция onLoad также удаляет IFRAME со страницы перед запуском функции обратного вызова.

Класс работает отлично, я получаю обратный вызов, как и ожидалось. На панели сети Firebug я вижу запрос, вижу ответ, все хорошо. Но, как только начинается отправка, вкладка браузера для страницы меняется на «Соединение» с загрузочным спиннером и никогда не меняется обратно. Это делает вкладку загружаемой, это будет продолжаться в течение дней , если я оставлю браузер открытым.

The never-ending "Connecting" message that plagues me

Тогда вопрос заключается в следующем: Есть ли у меня какой-либо способ остановить это вручную, или есть какой-то другой способ, который я могу предотвратить его запуск?

Вот заголовки ответа, взятые из панели Net:

Date    Fri, 02 Sep 2011 15:23:15 GMT
Server  Apache/2.2.10 (Win32) PHP/5.3.1
X-Powered-By    PHP/5.3.1
Expires Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control   no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma  no-cache
Set-Cookie  PHPSESSID=agncdnha86mtci7dmuvriobak2; path=/
Content-Length  165
Keep-Alive  timeout=5, max=100
Connection  Keep-Alive
Content-Type    text/html

и захват панели Net ниже. POST - от подачи формы, GET - от функции обратного вызова, он меняет источник изображения на странице.

Screenshot of Firebug's Net panel

Это не относится к данной странице, это происходит везде, где я использую этот метод для отправки файла/изображения через IFRAME . Это влияет на текущую версию Firefox (6.0), а также на предыдущие версии (5.x, 4.x, 3.x). Тот факт, что IFRAME удаляется со страницы после загрузки, делает это особенно странным - даже если запрос так и не был завершен, удаление элемента должно эффективно убивать/останавливать и «подключаться», как считает браузер.

ОБНОВЛЕНИЕ В ответ от @ Sidnicious я добавил тайм-аут к функции обратного вызова, чтобы ввести задержку при удалении элемента IFRAME . Я экспериментировал с длиной задержки, даже 1 мс задержка достаточна. Это, безусловно, квалифицируется как обход, но я все еще хотел бы знать, может ли кто-то пролить свет на почему этого, предпочтительно, чтобы избежать использования тайм-аута все вместе. Я включил измененный код (с тайм-аутом) ниже, на случай, если это полезно. Это событие onLoad для IFRAME ( io ссылка на элемент кадра):

        var obj={};
        var success = true;
        try{
            obj.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;
            obj.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;
        }
        catch(e){ success = false; }
        if( success ){
            this.fireEvent('onSuccess', obj.responseText );
        }else{
            this.fireEvent('onFailure', obj );
        }
        this.fireEvent('onComplete', obj );
        io.removeEvent('load', uploadCallback );
        setTimeout(function () { // <--- this timeout prevents the issue
            io.dispose();
        }, 1);
-121--1360397- Определить, выполняется ли данное задание в данный момент с помощью API Hudson/Jenkins Существует ли API для определения того, является ли данное задание в настоящее время В идеале,Я также хотел бы иметь возможность определить его предполагаемый% завершения и получить детали номера редакции SVN...

Существует ли API для определения того, выполняется ли данное задание в настоящее время или нет?

В идеале, я также хотел бы иметь возможность определить его предполагаемый% завершения и получить подробную информацию о номере редакции SVN и подтвердить комментарий!

EDIT:

Я нашел ответ. http ://host/job/project/lastBuild/api/ имеет почти все то, что мне нужно в нем где-то! Если вы запускаете ручную сборку, она не будет указывать вам наборы изменений SCM, но это имеет смысл. Тем не менее, это все еще говорит вам последнюю версию SCM, так что это хорошо. В общем, достаточно хорошо для моих целей прямо сейчас.

17
задан dty 2 September 2011 в 19:38
поделиться