Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: JavaScript выведенный через AJAX не работает.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Skif_ru23
Отправлено: 13 Ноября, 2011 - 18:11:45
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Доброго всем дня...

Столкнулся с проблемой, через AJAX возвращается контент страницы, выводится всё в блок div. В контенте есть ЯВА-скрипт, который не виден браузером.

Задача состоит в том, чтобы вывести несколько превьшек и скриптом их выводить на большую картинку. Сам скрипт рабочий, если все это мутить через обычный PHP все работает...

Это возвращается в контент...
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <script type="text/javascript">
  3. function image(num) {
  4.    imgview=new Array('.$image_arr.'); // Сформированы имена файлов картинок
  5.    imgOn = ("images/" + imgview[num]);
  6.    document.oimage1.src = imgOn;
  7. }
  8. </script>
  9. <center>
  10.     <Table id="mdl" border=0 cellspacing="0" cellpadding="0">
  11.         <tr height="25">
  12.             <td colspan=3 align="right">
  13.                 <a ID="close" href="javascript:hidemdl()">Закрыть</a>
  14.             </td>
  15.         </tr>
  16.         <tr>
  17.             <td colspan=3>
  18.                 <Table style="width:100%;" border=0 cellspacing="0" cellpadding="0">
  19.                     <tr>
  20.                         <td rowspan=4 style="width:220px;">
  21.                             <a href="javascript:hidemdl()"><img id="image_main" name="oimage1" src="images/'.$image.'" border=0 width="275" height="413"></a>
  22.                         </td>
  23.                     </tr>
  24.                     <tr>
  25.                         <td colspan="2">
  26.                              <a href='javascript:image(0)'><img src='../images/".$row["image0"]."' /></a>
  27.                              <a href='javascript:image(1)'><img src='../images/".$row["image1"]."' /></a>
  28.                              <a href='javascript:image(2)'><img src='../images/".$row["image2"]."' /></a>
  29.                         <td>
  30.                     </tr>
  31.                 </table>
  32.             </td>
  33.         </tr>
  34.     </table>
  35. </center>  
  36.  


Выводится все в блок div
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <div ID="layer" style="visibility:hidden">
  3.     <div id="form">
  4.          <!-- content -->
  5.     </div>
  6. </div>
  7.  


Запрашивающий скрипт не вижу смысла выкладывать, его задача сделать запрос, получить ответ, изменить стиль в ID="layer" на видимый, все выводится, все видно, но скрипт не работает. Все браузеры ссылаются на то, что не определена функция image...

Никак не пойму, почему не виден скрипт? Что и где не так?

Дополняю, спустя время...

После долгих изысканий, я сделал вывод, что не могу добраться до идентификаторов объектов, которые которые находятся внутри ответа сервера через Аякс...

Почему?

(Отредактировано автором: 13 Ноября, 2011 - 20:46:42)

 
 Top
sKaa
Отправлено: 13 Ноября, 2011 - 21:04:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


А тебе обязательно подгружать эту функцию через ajax? почему бы её не вынести в отдельный файл и подргужать где нить в <head> ?
Почитай че нить про http://javascript.ru/eval, хз мб поможет..
 
 Top
tuareg
Отправлено: 13 Ноября, 2011 - 21:11:56
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Если jQuery===> $.getScript()
если нет, то смотрите аналог $.getScript() для js
Только придется делать 2 ajax запроса.
Первый html, второй $.getScript()
 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Ноября, 2011 - 21:36:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




tuareg пишет:
Только придется делать 2 ajax запроса.
Не не!!!
Принимаете исходный текст скрипта и:
CODE (javascript):
скопировать код в буфер обмена
  1. // шоб не упало объявим пустой
  2. var ppp = {};
  3. // все, теперь у нас весь ф-ционал
  4. ppp = eval("("+text+")");
 
 Top
tuareg
Отправлено: 13 Ноября, 2011 - 22:26:28
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Можно и так почитайте все расписано http://javascript[dot]ru/eval
Как раз все плюсы и минусы в основном безопасность

(Отредактировано автором: 13 Ноября, 2011 - 22:27:06)

 
 Top
Skif_ru23
Отправлено: 14 Ноября, 2011 - 00:32:36
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Нояб. 2011  


Помог: 0 раз(а)




Можно и eval... С большим трудом разобрался как и что...

Но мне больше понравился не озвученный вариант тут:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.     var scr = document.createElement("script");
  3.     scr.src="script.php?id="+id;
  4.     document.head.appendChild(scr);    
  5.  


Данный скрипт, создает элемент SCR, запрашивает файл сервера script.php (через $_GET). PHP возвращает JAVA-скрипт, который вписывается между тегами HEAD.

Можно и BODY, но строка такая:
CODE (htmlphp):
скопировать код в буфер обмена
  1.     document.body.appendChild(scr);    


Таким образом, делаем два запроса: 1. HTML; 2. JavaScript. несколько не удобно, но работает...

(Отредактировано автором: 14 Ноября, 2011 - 00:40:28)

 
 Top
armancho7777777 Супермодератор
Отправлено: 22 Декабря, 2011 - 00:07:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Используйте jQuery расширение livequery.
Тут почитать можно:
http://www[dot]linkexchanger[dot]su/2009/76[dot]html
 
 Top
tuareg
Отправлено: 22 Декабря, 2011 - 01:50:01
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




armancho7777777 пишет:
Используйте jQuery расширение livequery.
Тут почитать можно:
http://www[dot]linkexchanger[dot]su/2009/76[dot]html

Не надо давать таких советов!!! Нахмурился
Надо читать док-ю.
live() уже давно в ядре, плюс есть delegate()
А с версии 1.7>= on()
 
 Top
armancho7777777 Супермодератор
Отправлено: 22 Декабря, 2011 - 08:16:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tuareg пишет:
Надо читать док-ю.
Да ну что вы говорите?) Правда, что-ли?) Я и не знал)
live() слаб, и не всегда работае как надо.

(Отредактировано автором: 22 Декабря, 2011 - 08:27:14)

 
 Top
Viper
Отправлено: 22 Декабря, 2011 - 08:52:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




tuareg вопрос несколько не по теме.
Если надо забиндить плагин на элемент создающийся после загрузки документа как быть?
Ссылку на объект то не получится передать. Тогда смысл в этом on() ?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
armancho7777777 Супермодератор
Отправлено: 22 Декабря, 2011 - 22:45:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Вот пример с livequery
Не проверял.
Так, чтоб понять преимущества плагина.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. $(document).ready(function(){
  4.  
  5.   var href_attr, index;
  6.  
  7.   $('UL LI').livequery(function(e){
  8.  
  9.           index = e;
  10.  
  11.         $(this).append('<a href="file'+index+'.php" class="link">Пункт - '+index+'</a>')
  12.                .find('link').click(function(event){
  13.                
  14.                 event.preventDefault();
  15.                 event.stopPropagation();
  16.                 href_attr = $(this).attr('href');
  17.                
  18.           $.get(href_attr, function(html_content){
  19.                  
  20.                 $('body').append(html_content).find('#div_content a').each(function(){
  21.                
  22.                 // #div_content a // это уже находится в подгружаемом контенте
  23.                
  24.                 $(this).click(function(event){
  25.                        
  26.                         event.preventDefault();
  27.                         event.stopPropagation();
  28.                        
  29.                         $(this).each(function(index){
  30.                                
  31.                           idex = index;
  32.                                
  33.                           $(this).next('.input_t').fadeIn(function(){
  34.                                  
  35.                                   $(this).val(index);
  36.                                  
  37.                           });
  38.                      });
  39.                   });
  40.              });  
  41.           });            
  42.       });
  43.   });
  44. });
  45.  

(Отредактировано автором: 22 Декабря, 2011 - 22:57:47)

 
 Top
tuareg
Отправлено: 22 Декабря, 2011 - 23:12:44
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




armancho7777777 пишет:
Да ну что вы говорите?) Правда, что-ли?) Я и не знал)
live() слаб, и не всегда работае как надо.

Можно пример, когда live сработает плохо? Есть delegate? Сейчас вообще on/off?
Viper пишет:

Если надо забиндить плагин на элемент создающийся после загрузки документа как быть?
Ссылку на объект то не получится передать.

А что конкретно не получается? Используйте вместо bind() используйте delegate()?
Или live(). Но лучше delegate()?
Или как вариант, если подгружаете html, то можно вместе с html подгружать и сам плагин.
Так даже проще будет. Закешируйте запрос и все будет хорошо.
Можно функцию придумать типа
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function activ(el){
  3.  el.плагин();
  4. }
  5. типа ajax(function(html_content){
  6.   $('body').append(html_content)
  7.   activ(передаем елемент, на который биндим плагин)
  8. })
  9.  

И вызывать ее после подгрузки контента.
Все эти проблемы решаются без сторонних плагинов.
(Добавление)
armancho7777777
Если я правильно понял, то
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).on('click','#div_content a',null,function(){
  3.   и тут ваш код
  4. })
  5.  

Как бы и все Улыбка

(Отредактировано автором: 23 Декабря, 2011 - 00:13:01)

 
 Top
Viper
Отправлено: 23 Декабря, 2011 - 07:53:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




tuareg пишет:
А что конкретно не получается?

CODE (javascript):
скопировать код в буфер обмена
  1. $('elem').on('click', function(){
  2.         var data = $(this).prop('someAttr');
  3.         $.myPlugin();
  4. });


В этом случае плагин забиндится на весь документ.
live() просто не сработает. Он сработает только при втором клике на том же элементе(т.е. вместо одного клика надо 2 раза кликнуть чобы сработало).

tuareg пишет:
Или как вариант, если подгружаете html, то можно вместе с html подгружать и сам плагин.
не вариант, т.к. получаю json.

delegate() полностью заменим on() в 1.7

Вот и выходит что лучше заюзать 1 раз костыль чем "рисовать план атаки Берлина".

(Отредактировано автором: 23 Декабря, 2011 - 07:55:00)



-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Декабря, 2011 - 10:22:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




tuareg пишет:
Можно пример, когда live сработает плохо?

Пример выше, с livequery, точно с live() работать не будет.
 
 Top
tuareg
Отправлено: 23 Декабря, 2011 - 13:38:46
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




armancho7777777 пишет:
tuareg пишет:
Можно пример, когда live сработает плохо?

Пример выше, с livequery, точно с live() работать не будет.

Если я правильно понял, что делает Ваш код. Есть менюшка, в ней ссылки, при клике на ссылку подгружается контент. В нем ссылки, при нажатии на которые что то происходит?
Ну и я приивел пример с delegate() он сработает! Потом если ссылки выбирать не
$('#div_content a') а сразу саму ссылку
типа $('a.ссылка') сработает и live()?
Viper
CODE (javascript):
скопировать код в буфер обмена
  1. $('elem').on('click', function(){
  2.         var data = $(this).prop('someAttr');
  3.         $.myPlugin();
  4. });
  5.  

А у Вас получается, что Вы ссылку на сам элемент не передаете
так по идее должно
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $('elem').on('click', function(){
  3.         var data = $(this).prop('someAttr');
  4.         $(this).myPlugin();
  5. или
  6.         $.myPlugin($(this));  
  7.  

У Вас же $.myPlugin(); это вообще обыкновенная ф-я.

(Отредактировано автором: 23 Декабря, 2011 - 13:55:19)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB