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 :: Скрипт выдает ошибку

 PHP.SU

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


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

> Без описания
Ammiak
Отправлено: 24 Декабря, 2013 - 21:53:02
Post Id


Частый гость


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


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




Здравствуйте, вывожу при скролле ajax'ом список товаров, для этого передаю данные в обработчик, обратно требуется вернуть собственно товары и id последнего выведенного товара. Однако скрипт почему-то выдает ошибку выполнения. Вот код ajax-запроса:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.     $.ajax ({    
  3.                     type: "POST",
  4.                     cache: false,
  5.                     dataType: 'json',
  6.                     url: '/ajax/catalog.php',
  7.                     data: {section_id:section_id, id:id},
  8.                     success: function(data) {
  9.                     alert(data['id']);
  10.                     },
  11.                     error:function() {alert("Ошибка выполнения");}
  12.      });
  13.  

Код обработчика
PHP:
скопировать код в буфер обмена
  1.  
  2. <?$arIds=array(); //создаем массив для записи id'шников выводимых товаров  
  3. //собственно цикл вывода товаров
  4. while { //условия
  5. ?>
  6. <div class="catalog_item_container">код блока с товаром</div>
  7. <?$arIds[]=$ob['ID']; //запись массива id'шников выводимых товаров
  8. }
  9.  
  10. //получаем id последнего выводимого товара
  11. $data['id'] = end($arIds);
  12. echo json_encode($data);
  13. ?>
  14.  

(Отредактировано автором: 24 Декабря, 2013 - 21:56:48)

 
 Top
SAD
Отправлено: 24 Декабря, 2013 - 22:10:08
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


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




может, потому что у вас не все сериализованно?

CODE (html):
скопировать код в буфер обмена
  1. <div class="catalog_item_container">код блока с товаром</div>


об этом то Вы забыли
 
 Top
Ammiak
Отправлено: 24 Декабря, 2013 - 22:38:00
Post Id


Частый гость


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


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




Действительно без html кода в обработчике все отлично работает. А как его можно отсериализовать (если можно хотя бы небольшой пример), впервые приходится такое делать
 
 Top
Deonis
Отправлено: 25 Декабря, 2013 - 08:11:48
Post Id



Посетитель


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


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




Ammiak пишет:
А как его можно отсериализовать
Вы собирались передавать этот элемент в ответе на ajax-запрос? Если да, то расположение его внутри цикла не случайное? Вам надо генерировать множество таких элементов? Для чего цикл, если на выходе вам нужен всего один какой-то id-шник? И условие в нем не написано случайно?
В общем, для начала ответьте хоть на эти вопросы. А вообще, ответ можно сформировать и так:
PHP:
скопировать код в буфер обмена
  1. echo json_encode(array($data, '<div class="catalog_item_container">код блока с товаром</div>'));
Только не забудьте, что в JS вы получаете уже массив данных и обращаться надо будет соответствующим образом. Напр.,
CODE (javascript):
скопировать код в буфер обмена
  1. success: function(data) {
  2.     alert(data[0]['id']);
  3. }
 
 Top
Ammiak
Отправлено: 25 Декабря, 2013 - 11:17:22
Post Id


Частый гость


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


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




Deonis спасибо что откликнулись ситуация такова:
Цитата:

Вы собирались передавать этот элемент в ответе на ajax-запрос? Если да, то расположение его внутри цикла не случайное?

Да, элементы выбираются запросом в цикле.
Цитата:

Для чего цикл, если на выходе вам нужен всего один какой-то id-шник? И условие в нем не написано случайно?

Мне нужно вернуть и несколько элементов и id-шник последнего выведенного элемента.
Вообщем пробую сделаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. //возвращаю id-шник последнего, здесь все ок
  3. $data['id'] = end($arIds);
  4. echo json_encode($data);
  5.  
  6.  
  7. //заношу отдельный элемент в переменную $div
  8. $div='<div class="catalog_item_container">
  9.                    <div class="container_item_label "><span>'.$ackc_type.'</span></div>
  10.  
  11.                    <div class="catalog_item_img_container_block ">
  12.                        <div class="catalog_item_img">
  13.                            <a href="/catalog/'.$ob['IBLOCK_SECTION_ID'].'/'.$ob['ID'].'/">'.$img.'</a>
  14.                        </div>
  15.                    </div>
  16.  
  17.                    <div class="catalog_item_name"><a href="/catalog/'.$ob['IBLOCK_SECTION_ID'].'/'.$ob['ID'].'/">'.$ob['NAME'].'</a></div>
  18.  
  19.                    <div class="catalog_item_props">
  20.                        <ul>
  21.                        '.$li_str.';
  22.                        </ul>
  23.                    </div>
  24.  
  25. </div>';
  26.  
  27. //пробую вернуть переменную $div, здесь выдает ошибку
  28. $data['div'] = $div;
  29. echo json_encode($data);
  30.  

В тексте ajax-запроса
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $.ajax ({    
  3.                     type: "POST",
  4.                     cache: false,
  5.                     dataType: 'json',
  6.                     url: '/ajax/catalog.php',
  7.                     data: {section_id:section_id, id:id},
  8.                     success: function(data) {
  9.                         alert(data['id']);
  10.                         alert(data['div']);
  11.                     },
  12.                     error:function() {alert("Ошибка выполнения");}
  13.      });
  14.  

Выдает ошибку выполнения

(Отредактировано автором: 25 Декабря, 2013 - 11:18:50)

 
 Top
IllusionMH
Отправлено: 25 Декабря, 2013 - 11:34:47
Post Id



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


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


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




Ammiak, вы так и делаете 2 раза echo? Если да, то первый раз лишний, и json становится невалидным.
 
 Top
Ammiak
Отправлено: 25 Декабря, 2013 - 12:36:21
Post Id


Частый гость


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


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




Действительно, теперь ошибок не выдает но alert(data['div']) возвращает пустоту:
PHP:
скопировать код в буфер обмена
  1.  
  2. $data['div'] = $div;
  3. json_encode($data);
  4.  
  5. $data['id'] = end($arIds);
  6. echo json_encode($data);
  7.  
 
 Top
IllusionMH
Отправлено: 25 Декабря, 2013 - 12:42:31
Post Id



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


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


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




Ammiak, сделайте var_dump($div, $data); повторив запрос вручную(можно сделать форму с двумя полями для данных и ее отправить не аяксом.

3я строка лишняя.

В js практичнее проверять через console.log(data)

(Отредактировано автором: 25 Декабря, 2013 - 12:45:27)

 
 Top
Deonis
Отправлено: 25 Декабря, 2013 - 12:47:39
Post Id



Посетитель


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


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




Ammiak, для общего понимания - есть один запрос и на него один ответ. Не может быть несколько ответов на один вопрос (это же не политики Подмигивание ). Формируйте данные как вам удобно, а потом скомпонуйте их в один массив и передавайте его ответом.
 
 Top
Ammiak
Отправлено: 25 Декабря, 2013 - 21:14:45
Post Id


Частый гость


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


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




действительно, собрал данные в один массив и все заработало. всем большое спасибо, всем +
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 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