Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > выполнить функцию в ajax


Автор: kovalenko123 5.6.2010, 12:51
Всем привет! никак не могу побороть такую проблему : 

Страница с аяксом (та которая подготавливает на вывод только нужную информации которую в последствии вставляю в нужный контейнер дива) должна вызывать функцию на другой странице (как раз к той которая к ней обращалась) вся проблема в аргументах которые должны передаваться они каждый раз разные 
вот функуция в главной странице  
Код

<script type="text/javascript">
            function ftray(x){
                alert(x);
            }
        </script>



вот как обращаюсь к странице аякса
Код

<script type="text/javascript">
            function fclick(n){
                 query ="searchajax.php?nav="+n;
                document.getElementById("ajaxcontent").innerHTML="<center><img style='margin-top:10px;' src='images/ajax-loader.gif' alt='Загрузка'/></center>";

                $.get(query,
                function(data){
                    document.getElementById("ajaxcontent").innerHTML = data;
                });
            }
        </script>


в searchajax.php естественно что то делается и в конце мне надо выполнить ту самую функцию "ftray" 

Код

<script type="text/javascript">
ftray(78); 
        </script>


так же пробовал добавить условие на готовность документа (document.ready) ниче не получилось 

Теперь вопрос ) как можно выполнить функцию из аякса

Автор: ksnk 5.6.2010, 13:41
Нужно открыть для себя, что ajax - это никакая не магия, а просто получение чего-то там с сервера. Это самое чего-то там может быть очень разным образом организовано. Один из способов этой организации - формат json.

Если бы searchajax.php выдавал бы такое
Код

{ 
   html: "hello world!",
   callme: ['ftray',78]
}

то на стороне клиента можно было бы написать примерно так
Код

$.get("searchajax.php?nav="+n,
   function(data){
       if (data && data.html)
           document.getElementById("ajaxcontent").innerHTML = data.html;
       if (data && data.callme && data.callme[0] &&  (typeof(window[data.callme[0]])=='function')){
           window[data.callme[0]](data.callme[1]);
       }
   }
  ,'json');


можно более изощренно выводить этот самый json
Код

{ 
   html: "hello world!",
   callme: function(){ftray(78);}
}
 тогда придется меньше писать в обработчике.

Автор: kovalenko123 5.6.2010, 16:24
Для меня деребаса это пока в диковинку как надоест так мучиться так сразу вернусь к старому и проверенному способу общения между страницами. 
Спасибо за ответ! 

Код

 if (data && data.html)


а это что за data.html какаято jqueryвская штука ? 


Автор: ksnk 5.6.2010, 17:22
это просто поверка, что data не null и в объекте data присутствует поле html. то самое поле, которое передается json'ом из searchajax.php 

Автор: kovalenko123 6.6.2010, 11:04
http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=70798&page=16

ksnk почему то не получаться прикрутить предложенное Вами решение аякс перестал работать ( может быть есть какой то другой способ вызова функции из полученного html-ля

Автор: ksnk 6.6.2010, 11:12
firebug есть? Какие ошибки показывает, что сервер выдает?
процесс называется - отладка...

Автор: kovalenko123 6.6.2010, 11:26
 
Цитата

Если бы searchajax.php выдавал бы такое
Код

{ 
   html: "hello world!",
   callme: ['ftray',78]
}



у меня тут непонятки вместо "hello world!" вставлять весь код который генерирует php ? 

фаирбаг уже скачиваю

Автор: ksnk 6.6.2010, 11:31
Цитата(kovalenko123 @  6.6.2010,  11:26 Найти цитируемый пост)
 вместо "hello world!" вставлять весь код который генерирует php ? 

да. то, что раньше выдавалось php. Правда придется экранировать символы " и переводы строк заменять на \r\n. Также, если строка очень длинная - придется разбивать ее операциями +

Автор: kovalenko123 7.6.2010, 11:09
Спасибо! Пришел второй программист и заставил всё это работать. Если бы я  прочитал какую-нибудь книгу по яваскрипту и не лез бы пихать аякс куда попала, а так же пользовался бы поиском по сайту с доками джиквери, то не доставал бы вас такими глупыми вопросами. Я постараюсь исправиться!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)