2016-01-07 4 views
1

Я вызываю функцию ajax при нажатии кнопки с использованием JavaScript. Скрипт php оценивает параметры и отгоняет либо 1 для успеха, либо 0 для отказа. Чтобы использовать другие JavaScript-коды для запуска, я использую синхронный метод (false). Тем не менее, после успешного выполнения PHP-кода, дальнейшие строки JavaScript, то есть, предупреждения не запускаются. Как это сделать? Примечание: Я не уверен, был ли задан этот вопрос ранее.Выполнение javascript-кода после синхронного ajax

var parameters = "user="+usr+"&id="+id; 
ajaxRequest.open("POST", 'chk.php', false); 
ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
ajaxRequest.send(parameters); 
ajaxRequest.onreadystatechange = function(){ 
    if(ajaxRequest.readyState == 4){ 
     if (ajaxRequest.responseText == 1) { 
      alert('Success'); 
     } else { 
      alert('Failure'); 
     } 
    } 
} 
+2

Почему вы используете синхронный ajax? Он никогда не должен использоваться, поскольку он блокирует весь пользовательский интерфейс для пользователя. – bvx89

+0

Пожалуйста, добавьте более подробную информацию к вашему вопросу ... вы упомянули, что код «дальнейшего JavaScript» не выполняется. Обратитесь к фрагменту кода и укажите, какие строки не выполняются. Кроме того, какие шаги вы предприняли для отладки кода? – hazardous

+0

HaZardouS, предупреждения не работают. – sridhar

ответ

0

Для применения других кодов JavaScript для запуска, я использую синхронный метод (ложь).

В вашем цитируемом коде нет необходимости делать это.

Однако после успешного выполнения PHP-кода дальнейшие строки JavaScript не запускаются.

Это потому, что вы используете синхронный запрос и подключаете onreadystatechange в неправильном месте. Если бы вы сделали это асинхронно, это сработало бы (но все равно должно быть изменено).

Выполнение синхронных сигналов XHR send не возвращается, пока работа не будет завершена. Вы не подключаете обработчик onreadystatechange до послеsend, поэтому он не подключен, когда запрос завершен, поэтому ваш код внутри обработчика не запускается.

Если вы хотите сохранить его синхронным двигаться настройками onreadystatechange к перед темsend кода. (Вы должны сделать это, даже если вы сделаете это асинхронным.)

Если вы хотите, чтобы код в обработчик для запуска, когда запрос завершается, нет необходимости делать это синхронный запросом, и есть веские причины не к.

Рекомендуемые изменения:

var parameters = "user="+usr+"&id="+id; 
ajaxRequest.open("POST", 'chk.php', true); // <== use async 
ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
ajaxRequest.onreadystatechange = function(){ // <== Moved up 
    if(ajaxRequest.readyState == 4){ 
     if (ajaxRequest.responseText == 1) { 
      alert('Success'); 
     } else { 
      alert('Failure'); 
     } 
    } 
}; 
ajaxRequest.send(parameters); 

Но покинувшие false на open, если вы действительно, действительно хотите синхронный запрос.

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