Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.02.2011, 10:27
Интересующийся
Отправить личное сообщение для eternal Посмотреть профиль Найти все сообщения от eternal
 
Регистрация: 10.02.2011
Сообщений: 19

не выполняется readyState == 4
Здравствуйте, возникла следующая проблема:
скрипт отсылает асинхронный запрос серверу который возвращает 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()
{
	// read the message from the server
  var xmlResponse = xmlLogin.responseXML;
  // catching potential errors with IE and Opera
  if (!xmlResponse || !xmlResponse.documentElement)
    throw("Invalid XML structure:\n" + xmlHttp.responseText);
  // catching potential errors with Firefox
  var rootNodeName = xmlResponse.documentElement.nodeName;
  if (rootNodeName == "parsererror") throw("Invalid XML structure");
  // obtain the XML's document element
  xmlRoot = xmlResponse.documentElement;  
  // obtain arrays with book titles and ISBNs 
  nameArray = xmlRoot.getElementsByTagName("name");
  passArray = xmlRoot.getElementsByTagName("pass");
  // generate HTML output
  var html = "";  
  // iterate through the arrays and create an HTML structure
  for (var i=0; i<nameArray.length; i++)
    html += nameArray.item(i).firstChild.data + 
            ", " + tovarArray.item(i).firstChild.data ;
			alert(html);
  // obtain a reference to the <div> element on the page
  myDiv = document.getElementById("userDiv");
  // display the HTML output
  myDiv.innerHTML = html;
}


при проверке выполнения этапов функции handleRequest выводится только сообщение "function started" и дальше ничего не происходит, firebug ни на что не ругается, и показывает что через POST вернулся xml, в IE выскакивает следующее сообщение: "Обнаружена ошибка [object Error]". Где у меня ошибка? Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
click выполняется один раз Karpo AJAX и COMET 4 22.01.2011 18:06
Помогите с readyState RiZoR AJAX и COMET 7 03.06.2010 16:05
Проблемма c readyState и status 5Seven AJAX и COMET 5 21.02.2010 19:23
readyState == 4, а responseText недоступен KPblCEHblLLl AJAX и COMET 4 19.11.2009 11:00
AHAH подгружает код из локального html-файла, но код в блоке не выполняется dimiork AJAX и COMET 0 13.10.2009 18:08