Здравствуйте, возникла следующая проблема:
скрипт отсылает асинхронный запрос серверу который возвращает xml документ, но в js не выполняется readyState == 4, тоесть состояние готовности не доходит до выполненного, хотя в firebug пишет готовность 4, код 200 и показывает правильный xml код
вот скрипт
Код:
// JavaScript Document
//создание запроса для проверки логина и пароля
var xmlLogin = new createXmlHttpRequestObject();
//создает экземпляр объекта XMLHttpRequest
function createXmlHttpRequestObject()
{
// переменная для хранения ссылки на объект XMLHttpRequest
var xmlHttp;
// this should work for all browsers except IE6 and older
try
{
// try to create XMLHttpRequest object
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
// assume IE6 or older
var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
// try every prog id until one works
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
{
try
{
// try to create XMLHttpRequest object
xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
}
catch (e) {}
}
}
// return the created object or display an error message
if (!xmlHttp)
alert("Error creating the XMLHttpRequest object.");
else
return xmlHttp;
}
//функция отправляет на сервер информацию для проверки логина и пароля
function login()
{
try
{
// если запросов нет или запрос уже вернулся
if (xmlLogin.readyState == 4 ||
xmlLogin.readyState == 0)
{
//определить переменные
var oLogin = document.getElementById("login").value;
var oPassword = document.getElementById("password").value;
//обезать пробелы
//oTovar = trim(oTovar);
//определить передаваемые данные
var params = "";
params += "login=" + encodeURIComponent(oLogin) +
"&pass=" + encodeURIComponent(oPassword);
// инициирует запрос xmlHttpRequest
xmlLogin.open("POST", "test.php", true);
xmlLogin.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
xmlLogin.onreadystatechange = handleRequest();
xmlLogin.send(params);
}
else
{
// display the error message
displayError(xmlLogin.statusText);
}
}
catch(e)
{
//вывести сообщение об ошибке при неудачной попытке
//установить соединение с сервером
displayError(e.toString());
}
}
// функция показывает сообщение об ошибке
function displayError(message)
{
// display error message, with more technical details if debugMode is true
alert("Обнаружена ошибка: \n" + message);
}
//проверить что вернулось после запроса
function handleRequest()
{alert("function started");
//когда readyState = 4, мы можем прочитать ответ сервера
if (xmlLogin.readyState == 4)
{alert("readyState 4");
// продолжать если статус равен ОК
if (xmlLogin.Status == 200)
{alert("status 200");
try
{
// вывести имя пользователя
setName();
}
catch(e)
{
// display error message
displayError(e.toString());
}
}
else
{
// display status message
displayError(xmlLogin.statusText);
}
}
}
//если вернулось имя значит логин, если ошибка то написать
function setName()
{
}
при проверке этапов выполнения функции handleRequest выводится только сообщение "function started" и дальше ничего не происходит, firebug ни на что не ругается, и показывает что через POST вернулся xml, где у меня ошибка. Спасибо
ps удалил содержимое функции setName, что бы тема создалась(слишком много символов)