PHP никогда не возвращает readyState 4 или статус 200 в ajax - PullRequest
1 голос
/ 14 декабря 2010

У меня есть следующая общая функция Ajax:

//run post request
function ajaxPost (divid, parameters, file) {

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  } else {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function() {
    alert ("ok")
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      alert ("ready");
      alert (xmlhttp.responseText);
    divid.innerHTML=xmlhttp.responseText;
    }
  }

  xmlhttp.open("POST", file,true);

  //Send the proper header information along with the request
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", parameters.length);
xmlhttp.setRequestHeader("Connection", "close");



xmlhttp.send(parameters);
}

Проблема в том, что этот раздел не работает должным образом:

xmlhttp.onreadystatechange=function() {
    alert ("ok")
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      alert ("ready");
      alert (xmlhttp.responseText);
    divid.innerHTML=xmlhttp.responseText;
    }
  }

В браузере я получаю несколько «ок» предупреждений, как и ожидалось, но операторы в операторе if никогда не запускаются. Я понимаю, что php возвращает обновления состояния, но по какой-то причине никогда не возвращает готовые коды. Как это может произойти - я понятия не имею.

Может кто-нибудь сказать мне, почему я не получил готовые коды?

Сам php не проблема:

<?php

echo "new";

?>

Я проверил функцию ввода (divid, параметры и файл), и все в порядке. Эта функция ранее работала в отдельном проекте.

Ответы [ 4 ]

1 голос
/ 10 октября 2012
xmlhttp.open("POST", file,true);

файл является URL-адресом правильно?
попытаться повторить с этого URL-адреса.

0 голосов
/ 07 декабря 2012

Извините, но проблема очень проста.Это заняло у меня целую неделю.

xmlhttp - это не то же самое, что xmlHttp.

0 голосов
/ 14 декабря 2010

xmlhttp.readyState && xmlhttp.status зависит от используемого браузера, а не от сценария PHP. В худшем случае PHP-скрипт может не перезапустить Status 200, и если это произойдет, это означает, что у вас либо ошибка в вашем скрипте (иногда это приводит к Status 500), либо сервер возвращает 404. В любом случае попробуйте получить прямой доступ к URL-адресу или загляните в окно журнала Firebug, это может быть проще для отладки.

0 голосов
/ 14 декабря 2010

Я бы рискнул предположить, что ваш сервер не возвращает действительный ответ 200, поэтому оператор if xmlhttp.readyState == 4 && xmlhttp.status == 200 никогда не будет равняться true.

Попробуйте использовать Firebug , чтобы увидеть, какой запросделается (если есть) и какой ответ вы получите.Если вы не используете Firefox, попробуйте использовать прокси-инструмент, такой как Charles .

. Кроме того, я настоятельно рекомендую использовать стабильную библиотеку Javascript с открытым исходным кодом, такую ​​как jQuery..В него встроен AJAX-код (помимо прочего), который тщательно тестируется.Это не только сэкономит ваше время, но и исключит дальнейшую возможность ошибок из вашего собственного кода, например,

$.get('url.php', function(data) {
    // 'data' is responseText
});
...