Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: массив обнуляется или обрабатывается раньше чем надо?
 
 автор: sanitar   (12.06.2009 в 19:35)   письмо автору
 
 


var userscolarr= new Array();
function getstartpos()
{
  url="getbattleusersposition.php?name="+window.nn;
    function getXMLHttpRequest() 
     {
      var xmlhttpreq=null;
      if (window.XMLHttpRequest) //Mozilla, Safari & IE 7
       {
    xmlhttpreq = new XMLHttpRequest();
       }
      else if(window.ActiveXObject) // IE 6 and later
       {
    try 
    {
     xmlhttpreq = new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch(err) 
    {
     xmlhttpreq = new ActiveXObject('Microsoft.XMLHTTP');
    }
       }
      return xmlhttpreq;
     }
    function sendRequest(method, url, param)
     {
      var request = getXMLHttpRequest();
      request.open(method, url, true);
      request.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded');
      request.onreadystatechange = function() 
       {
    handleAjaxResponse(request);
       };
      request.send(param);
     }
    function isSuccess(request)
     {
      return request.status == 0 || (request.status >= 200 && request.status < 300);
     }
    function handleAjaxResponse(request)
     {
   if(request.readyState == 4) 
       {
    if(isSuccess(request))
     {
      var responseXML = request.responseXML;
      var root = responseXML.getElementsByTagName('response').item(0);
      var responseID = Array();
      var responseValue = Array();
          var usersaa= new Array();
      for (var iNode = 0; iNode < root.childNodes.length; iNode++) 
       {
        var node = root.childNodes.item(iNode);
        for (ik = 0; ik < node.childNodes.length; ik++) 
         {
          var block = node.childNodes.item(ik);
          if (block.nodeType != 1) 
          continue;
          switch(block.nodeName)
           {
        case "names":
                 usersaa[block.firstChild.nodeValue]= new Array();
                 persname=block.firstChild.nodeValue;
                 userscolarr[ik]=block.firstChild.nodeValue;
alert("userscolarr fist="+userscolarr[0]);
        break;
        case "position":
                 var flpos=parseFloat(block.firstChild.nodeValue);
                 usersaa[persname]['persX']=cell[flpos]['x']-10;
                 usersaa[persname]['persY']=cell[flpos]['y']-70;
        break;
           }
         }
       }
      for(ik=0; responseID.length; ik++)
       {
        document.getElementById(responseID.pop()).innerHTML = responseValue.pop();
       }
     }
       }
     }
sendRequest('GET', url, null);
};
function map_array()
{
getstartpos();
var a=1;
var m='';
while (a<155)
 {
  m+='<img src="no1.gif" alt='+a+' id='+a+' style="position: absolute; left: '+cell[a]['x']+'px; top:'+cell[a]['y']+'px;" onMouseOver="kurin('+a+')" onMouseOut="kurout('+a+')" onmouseup="move('+a+')">';
  a=a+1;
 }
 map_out('battlediv',m);
alert("userscolarr="+userscolarr[0]);


для чего эта часть кода-не спрашивайте.излагаю проблемму:в функции getstartpos() в массив userscolarr мы добавляем имена.на данный момент туда вносится всего одно имя,и оно "1".
тут alert("userscolarr fist="+userscolarr[0]); выводится нормально userscolarr fist=1
но вот тут alert("userscolarr="+userscolarr[0]) ,это в конце кода,выводится userscolarr=undefined
может быть что скрипт не дожидается завершения функции getstartpos() и идет дальше,и соответственно не знает значение userscolarr[0],или этот массив каким-то чудом обнуляется?

  Ответить  
 
 автор: Crux   (16.06.2009 в 11:35)   письмо автору
 
   для: sanitar   (12.06.2009 в 19:35)
 

>может быть что скрипт не дожидается завершения функции getstartpos() и идет дальше,и соответственно не знает значение userscolarr[0]

совершенно верно.

http://xmlhttprequest.ru/

...
Асинхронный XMLHttpRequest
Этот пример делает то же самое, но асинхронно, т.е браузер не ждет выполнения запроса для продолжения скрипта. Вместо этого к свойству onreadystatechange подвешивается функция, которую запрос вызовет сам, когда получит ответ с сервера.

var xmlhttp = getXmlHttp()
xmlhttp.open('GET', '/xhr/test.html', true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
     if(xmlhttp.status == 200) {
       alert(xmlhttp.responseText);
         }
  }
};
xmlhttp.send(null);

Асинхронность включается третьим параметром функции open. В отличие от синхронного запроса, функция send() не останавливает выполнение скрипта, а просто отправляет запрос.
...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования