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
Форумы портала PHP.SU :: Версия для печати :: Проблема с JSON
Форумы портала PHP.SU » » Вопросы новичков » Проблема с JSON

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

1. Alex1984 - 29 Июня, 2015 - 11:11:18 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $json_arr = json_encode($block_array);
  3.  
  4. $pager_res = array('<p><div class="pager"> </div>');
  5.  
  6. for($i = 1; $i <= $page_array_size; $i++)
  7. {
  8.     array_push($pager_res, '<input type="button" class="page_button" id="page'.$i.'" value="'.$i.'">');
  9.  
  10.     array_push($pager_res, '<script type="text/javascript">
  11.                         $(document).ready(function(){
  12.                         $.post("http://www.site.de/classes/pager.php",
  13.                         {page: "1", page_array: '.$json_arr.', row_in_page: '.$row_in_page.',
  14.                          css_class: "user_list"}, function(data){
  15.  
  16.                              $(".user_list").replaceWith(data);
  17.                         })
  18.                         });
  19.                         $("#page'.$i.'").click(function(event){
  20.  
  21.                         $.post("http://www.site.de/classes/pager.php",
  22.                         {page: '.$i.', page_array: '.$json_arr.', row_in_page: '.$row_in_page.',
  23.                         css_class: "user_list"}, function(data){
  24.                              //alert('.$i.');
  25.                              $(".user_list").replaceWith(data);
  26.                         })
  27.                         });
  28.                         </script>');
  29. }
  30.  


Есть массив json_array который с помощью jquery отправляется в файл pager.php

PHP:
скопировать код в буфер обмена
  1.  
  2. $page = $_POST['page'];
  3. $page_array = $_POST['page_array'];
  4. $row_in_page = $_POST['row_in_page'];
  5. $css_class = $_POST['css_class'];
  6.  
  7. $page_res = array_chunk($page_array, $row_in_page);
  8.  
  9. $res = implode(' ', $page_res[$page - 1]);
  10.  
  11. echo '<div class="'.$css_class.'">'.$res.'</div>';
  12.  
  13.  


и в общем то все что нужно из этого файла возвращается, но почему то выскакивают ошибки:

Warning: array_chunk() expects parameter 1 to be array, null given in C:\OpenServer\domains\site.de\www\classes\pager.php on line 17

Warning: implode(): Invalid arguments passed in C:\OpenServer\domains\site.de\www\classes\pager.php on line 19

Подскжите откуда ошибки, или почему вообще работает с такими ошибками.
2. zypikov - 29 Июня, 2015 - 13:07:14 - перейти к сообщению
Достаточно немного знать английский, чтобы понять какие выдал интерпретатор php.
1) array_chunk() - первый параметр должен быть массивом, а на вход подается null
2) implode() - поскольку array_chunk() отрабатывает с ошибками, а implode() использует $page_res в качестве параметра, то ничего удивительного. Но если дословно - на в функцию передаются неверные аргументы.

Особо код не смотрел но:

PHP:
скопировать код в буфер обмена
  1. $pager_res = array('<p><div class="pager"> </div>');

Зачем массивом объявлять переменную являющуюся строкой?

Цитата:
или почему вообще работает с такими ошибками.

Ну может быть первый раз(если их больше одного) jquery отправляет верные данные, потом нет.
3. Alex1984 - 29 Июня, 2015 - 14:11:16 - перейти к сообщению
JQuery каждый раз отправляет правильные данные, как переводятся ошибки тоже знаю, не понимаю почему все работает как и должно но выводятся ошибки.

Вот это [0,1,2,3,4,5,6,7,8,9] отправляется скриптом.
Вот это Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 ) приходит в файл. я конечно хз, но по моему это все таки массив и почему на нем выдает ошибку не понимаю

echo gettype($_POST['page_array']); выдает - array
4. zypikov - 29 Июня, 2015 - 15:23:02 - перейти к сообщению
Alex1984 пишет:
Вот это Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )
. Это
?

И раз данные закодированы json_encode на клиенте, на должны ли они быть декодированы json_decode на сервере?
5. Alex1984 - 29 Июня, 2015 - 15:28:49 - перейти к сообщению
Нет, мне уже приходит массив Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

в скрипте это выглядит так
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.                          $.post("http://www.site.de/classes/pager.php",
  3.                          {page: 3, [b] page_array: [0,1,2,3,4,5,6,7,8,9][/b], row_in_page: 6, css_class: "user_list"},
  4.                          function(data){
  5.                           $(".user_list").replaceWith(data);
  6.                          })
  7.  


выделенная строчка отправляется массивом.

echo gettype($_POST['page_array']); выдает - array

получается что функция gettype видит что это массив, а функция array_chunk не видит ))

var_dump
array(10) { [0]=> string(1) "0" [1]=> string(1) "1" [2]=> string(1) "2" [3]=> string(1) "3" [4]=> string(1) "4" [5]=> string(1) "5" [6]=> string(1) "6" [7]=> string(1) "7" [8]=> string(1) "8" [9]=> string(1) "9" }
6. zypikov - 29 Июня, 2015 - 15:34:01 - перейти к сообщению
Можете сделать
и результат выложить?
7. Alex1984 - 29 Июня, 2015 - 16:14:27 - перейти к сообщению
То же самое

array(10) { [0]=> string(1) "0" [1]=> string(1) "1" [2]=> string(1) "2" [3]=> string(1) "3" [4]=> string(1) "4" [5]=> string(1) "5" [6]=> string(1) "6" [7]=> string(1) "7" [8]=> string(1) "8" [9]=> string(1) "9" }

я даже так пробовал

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($_POST['page_array'] as $page_val)
  3. {
  4.     array_push($page_array, $page_val);
  5. }
  6.  


пишет Invalid argument supplied for foreach() но в массив page_array элементы добавляет ))
8. zypikov - 29 Июня, 2015 - 16:17:10 - перейти к сообщению
Вы отредактировали пост, когда я писал свой последний. Поэтому дубликат вышел
Ну оберните так:

PHP:
скопировать код в буфер обмена
  1.  
  2. if(is_array($page_array)){
  3. $page_res = array_chunk($page_array, $row_in_page);
  4. $res = implode(' ', $page_res[$page - 1]);
  5. echo '<div class="'.$css_class.'">'.$res.'</div>';
  6. }
  7.  
9. Alex1984 - 29 Июня, 2015 - 16:23:27 - перейти к сообщению
Помогло с проверкой спасибо, ошибки пропали, хотя в чем смысл не очень понятно, если is_array проходит значит это массив, тогда чего бы ему без проверки не работать

Другая ошибка появилась, но в общем то как работало так и работает

 

Powered by ExBB FM 1.0 RC1