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

HTML+CSS+JavaScript

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

 

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

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

тема: Функция JS не возвращает значение
 
 автор: toproot   (24.09.2011 в 23:21)   письмо автору
 
 

function getInfo(dataSource) {
     if(XMLHttpRequestObjectMAID) {
XMLHttpRequestObjectMAID.open("GET",dataSource);
XMLHttpRequestObjectMAID.onreadystatechange = function()
 {
if (XMLHttpRequestObjectMAID.readyState == 4 && XMLHttpRequestObjectMAID.status == 200) { 
  return XMLHttpRequestObjectMAID.responseText; 
 } 
 }  
}    
XMLHttpRequestObjectMAID.send(null);
      }

- Вот.
Главное когда пишеш вместо return - document.getElementById('element').innerHTML = XMLHttpR... то вске работает. а как переменную вернуть так нивкакую.
а так возвращает undefined !
Уверен что поможете мне. Спасибо!

  Ответить  
 
 автор: deimand   (25.09.2011 в 01:31)   письмо автору
 
   для: toproot   (24.09.2011 в 23:21)
 

вот как это работает

  Ответить  
 
 автор: АЯС   (25.09.2011 в 09:28)   письмо автору
 
   для: toproot   (24.09.2011 в 23:21)
 

>а как переменную вернуть так нивкакую. а так возвращает undefined !

А куда (кому) вы эту переменную "возвращаете"?

Получается, что возвращаете вы полученное от сервера текстовое значение событию onreadystatechange.

Положим, вернет вам сервер строку ХА-ХА.
Ну и как должен реагировать браузер на onreadystatechange = ХА-ХА ? :-))

  Ответить  
 
 автор: toproot   (25.09.2011 в 14:50)   письмо автору
 
   для: АЯС   (25.09.2011 в 09:28)
 

Как же тогда получить переменную ?

Может выгрузить ее сначало в невидимый слой а потом из него извлечь ?

  Ответить  
 
 автор: deimand   (25.09.2011 в 15:04)   письмо автору
 
   для: toproot   (25.09.2011 в 14:50)
 


if (XMLHttpRequestObjectMAID.readyState == 4 && XMLHttpRequestObjectMAID.status == 200) { 
  return XMLHttpRequestObjectMAID.responseText;

замените на

if (XMLHttpRequestObjectMAID.readyState == 4 && XMLHttpRequestObjectMAID.status == 200) { 
  var peremennaya = XMLHttpRequestObjectMAID.responseText;

  Ответить  
 
 автор: toproot   (25.09.2011 в 16:09)   письмо автору
 
   для: deimand   (25.09.2011 в 15:04)
 

Но ведь переменная var peremennaya - локальная. Естественно ее нигде больше не достать.
global насколько я знаю в JS нет такого..

  Ответить  
 
 автор: АЯС   (26.09.2011 в 01:47)   письмо автору
 
   для: toproot   (25.09.2011 в 16:09)
 

 var  peremennaya = XMLHttpRequestObjectMAID.responseText; 

  Ответить  
 
 автор: toproot   (26.09.2011 в 19:02)   письмо автору
 
   для: АЯС   (26.09.2011 в 01:47)
 

function getInfo(dataSource) { 
     if(XMLHttpRequestObjectMAID) { 
XMLHttpRequestObjectMAID.open("GET",dataSource); 
XMLHttpRequestObjectMAID.onreadystatechange = function() 
 { 
if (XMLHttpRequestObjectMAID.readyState == 4 && XMLHttpRequestObjectMAID.status == 200) {  
  per = XMLHttpRequestObjectMAID.responseText;  
 }  
 }   
}     
XMLHttpRequestObjectMAID.send(null);
//return per; 
      }

- Возвращает undefined. Незнаю чего можна добистья убрав var.

  Ответить  
 
 автор: toproot   (26.09.2011 в 20:50)   письмо автору
 
   для: toproot   (26.09.2011 в 19:02)
 

После долгого и мучительного сидения за компом я понял что JavaScript просто игнорирует мою функцию. оставляет ее на потом. Все выполнилось, а потом в конце ета функция. такое не годитсья.

Как заставить силой выполнятсья ету функцию вовремя?

  Ответить  
 
 автор: АЯС   (27.09.2011 в 00:43)   письмо автору
 
   для: toproot   (26.09.2011 в 20:50)
 

>Как заставить силой выполнятсья ету функцию вовремя?

Никак не заставить.
Эта функция запускается по событию onreadystatechange при двух условиях: readyState == 4 и status == 200.

Когда два эти условия будут исполнены - никому не известно, ибо зависит это от многих факторов (в т. ч. скорость интернет-соединения, пропускная способность канала связи, быстродействие компьютера...). Может сработать через миллисекунду, а может - и через минуту.

"По уму" все необходимые вам действия с переменной per надо производить ВНУТРИ этой же функции (где эта переменная получает своё значение). Тогда НИКАКИХ проблем у вас не будет.

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

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