Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2011, 18:48
Новичок на форуме
Отправить личное сообщение для gen552 Посмотреть профиль Найти все сообщения от gen552
 
Регистрация: 31.03.2011
Сообщений: 9

Возвращение результата.
Всем привет. Есть такой код.

var xmlHttp = createXMLHttpRequest();       
    var createUrl = 'phppages/handler.php';        
    xmlHttp.open('GET', createUrl, true);    
    xmlHttp.onreadystatechange = getObj;    
    xmlHttp.send(null); 

    
    function getObj ()
            {
                if (xmlHttp.readyState == 4)
                    {
                        if (xmlHttp.status == 200)
                            {
                                
                                var getObject = JSON.parse(xmlHttp.responseText);
                                  
                            } 
                             else if (xmlHttp.status == 404)
                                 {
                                    alert("Страница не найдена! Ошибка 404.");
                                 }
                             else
                                 {
                                    alert("Ошибка: статус кода " + xmlHttp.status);
                                 } 
                    }                                                            
            }


Можно ли как то всё что хранится в var getObject вынести за пределы этой ф-ции? Т.е. чтобы я мог создать новую страницу, и работать с получеными данными там, а не писал трьох километровый код в этой ф-ции.

Обычно это делается через return. Но здесь это не проходит.
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2011, 19:00
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Вообще, вариантов несколько. Но в основном принято использовать callback-функции. Принцип такой:
if (xmlHttp.status == 200)
  {
    callback( JSON.parse(xmlHttp.responseText) );
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2011, 21:21
Новичок на форуме
Отправить личное сообщение для gen552 Посмотреть профиль Найти все сообщения от gen552
 
Регистрация: 31.03.2011
Сообщений: 9

Как правильно написать такую ф-цию? Можно по подробнее или ссылку.
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2011, 22:41
Аватар для walik
Профессор
Отправить личное сообщение для walik Посмотреть профиль Найти все сообщения от walik
 
Регистрация: 09.11.2009
Сообщений: 1,101

Вот элементарный пример как использовать callback в своих функциях:
function sum(a, b, callback) {
   var s= a+b;
   callback(s);
}

function showSum(s) {
   alert(s);
}

sum(2, 3, showSum);
__________________
"Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете."
Мой сертификат :-D клацай
Ответить с цитированием
  #5 (permalink)  
Старый 25.06.2011, 00:34
Новичок на форуме
Отправить личное сообщение для gen552 Посмотреть профиль Найти все сообщения от gen552
 
Регистрация: 31.03.2011
Сообщений: 9

Что я не так делаю? Не получается.

var xmlHttp = createXMLHttpRequest();       
    var createUrl = 'phppages/handler.php';        
    xmlHttp.open('GET', createUrl, true);    
    xmlHttp.onreadystatechange = getObj (showRespText) 
    xmlHttp.send(null); 


    function getObj (callback) 
        {
            if (xmlHttp.readyState == 4)
                {
                   if (xmlHttp.status == 200)
                        {             
                    	   var txt = JSON.parse(xmlHttp.responseText); 
                    	   callback(txt); 
                        } 
                         else if (xmlHttp.status == 404)
                             {
                                alert("Страница не найдена! Ошибка 404.");
                             }
                         else
                             {
                                alert("Ошибка: статус кода " + xmlHttp.status);
                             } 
                }           
    	} 
	  
	function showRespText(txt) 
        { 
    	   alert(txt); 
    	} 
        
    getObj (showRespText)
Ответить с цитированием
  #6 (permalink)  
Старый 25.06.2011, 01:43
Новичок на форуме
Отправить личное сообщение для gen552 Посмотреть профиль Найти все сообщения от gen552
 
Регистрация: 31.03.2011
Сообщений: 9

Всё. Разобрался. Спасибо.
Но это все равно не то что я хотел.
Ответить с цитированием
  #7 (permalink)  
Старый 26.06.2011, 10:12
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

можно сделать запрос неасинхронным, тогда всё будет легче, но появится притормаживание

xmlHttp.open('GET', createUrl, *!*false*/!*);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возврат результата функции через её параметр x-yuri Оффтопик 11 16.04.2010 11:52
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23
JS-скрипт для вывода результата работы PHP-скрипта в заданном месте страницы Tycoon AJAX и COMET 0 06.11.2009 10:18
Возвращение значения из функции dba Events/DOM/Window 21 06.10.2009 01:33
AJAX. Возвращение массива HTML Neil AJAX и COMET 9 12.02.2009 16:00