Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> массив обнуляется или обрабатывается раньше чем на 
:(
    Опции темы
z006
Дата 12.6.2009, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



Код

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],или этот массив каким-то чудом обнуляется?
PM MAIL   Вверх
youri
Дата 12.6.2009, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: 2
Всего: 16



Цитата(z006 @  12.6.2009,  20:46 Найти цитируемый пост)
может быть что скрипт не дожидается завершения функции getstartpos() и идет дальше,и соответственно не знает значение userscolarr[0],или этот массив каким-то чудом обнуляется?

угадал smile первый alert выполняется по завершению асинхронного запроса, а второй - сразу после отправки
PM   Вверх
z006
Дата 12.6.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.6.2009

Репутация: нет
Всего: нет



блин,а как его заставить дождаться окончания выполнения запроса?не тулить-же в тупую задержку туда...
PM MAIL   Вверх
Aliance
Дата 15.6.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Сделать Callback-функцию в которой писать все команды, которые должны выполнится после ответа от сервера.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.