2016-08-17 2 views
0

У меня есть XMLHttpRequest, определенный как это:Вызывает ли вызов дважды onreadystatechange на функции?

sub_opt=function() 
{ 
var xhr = (window.XMLHttpRequest) ? new XMLHttpRequest() : new activeXObject("Microsoft.XMLHTTP"); 
var data = new FormData(); 
...some stuff to complete data 
xhr.open('post', 'PHP/write_and_exec_opt.php'); 
var display_opt=xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4 && xhr.status == 200) { 
       text=xhr.responseText.trim(); 
....some stuff 
    } 
xhr.send(data); 
return xhr; 
} 

эта функция была вызвана другой функцией, где XHR хранится в глобальной переменной для файла JS под именем previousRequest. Пока запрос обрабатывается, пользователь может делать другие вещи, но мне нужно, чтобы некоторые из файлов, которые он мог инициализировать, останавливались после завершения запроса. Таким образом, я разместил в необходимом месте следующую деталь:

var stop_refresh=previousRequest.onreadystatechange = function() { 
     if (previousRequest.readyState == 4) { 
clearInterval(refresh); 
     }}; 

называться, когда тот же запрос завершен. Проблема в том, что если я поставлю только один из onreadystatechange, он отлично работает, но только с двумя работающими. Не разрешено ли делать то, что я пытаюсь?

Благодарим за советы.

+0

Вы пытались с обещаниями? Это смутно выглядит, как ваш асинхронный материал может использовать некоторые обещания («но мне нужно, чтобы некоторые вещи, которые он мог инициализировать, чтобы остановить, как только запрос завершен»). –

ответ

0

Имейте в виду, что onreadystatechange является свойством объекта.

Когда вы установите его, вы перезаписываете предыдущие значения. Это не то же самое, что при добавлении двух разных слушателей к одному и тому же объекту, позволяя различным обработчикам запускать одно событие.

Таким образом, при изменении свойства onreadystatechange вы полностью перезаписываете предыдущее значение.

Вам нужно будет возиться с вашими функциями и namespacing, чтобы исправить вашу проблему.

Смежные вопросы