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 :: Не получается передать на сервер JS массив с помощью ajax

 PHP.SU

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


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

> Описание: И да, я гуглил, кучу форумов перелопатил
surrealistic pillow
Отправлено: 04 Сентября, 2015 - 11:51:19
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Март 2014  


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




У меня вопрос, на который я при всем старании, не нашел ответа.

На странице имеется множество ссылок с классом 'link'. Я получаю массив этих ссылок, и пытаюсь передать на сервер его, но не выходит. Огорчение
CODE (javascript):
скопировать код в буфер обмена
  1. $(function(){
  2.         var array = [];
  3.  
  4.         $('a.link').each(function(){
  5.                 array[array.length] = $(this).attr('href');
  6.         });  
  7.        
  8.         var data = "array = " + JSON.stringify( array );
  9.         alert(data);//выводит на экран что-то вроде 'array = ["http://mysite.ru/1.html","http://mysite.ru/2.html",...]'        
  10.        
  11.         $.ajax({
  12.                 url:     'url.php', //Адрес подгружаемой страницы
  13.                 type:     "POST", //Тип запроса
  14.                 data:  data,                      
  15.                 success: function(response) { //Если все нормально
  16.                         alert(response);
  17.                 }                      
  18.         });
  19. });
  20.  

в принимающем скрипте вот что:
PHP:
скопировать код в буфер обмена
  1.  
  2. $array = json_decode( $_POST['array'], true );
  3. var_dump($array);//просто чтобы понять приходит что-то или нет
  4.  


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

Пробовал преобразовывать массив ссылок в обьект, потом обьект в JSON - тоже безрезультатно
CODE (javascript):
скопировать код в буфер обмена
  1. function toObject(array) {
  2.         var res = {};
  3.         for (var i = 0; i < array.length; ++i)
  4.                 if (array[i] !== undefined) res[i] = array[i];
  5.         return res;
  6.         }
  7. var obj = toObject(array);
  8. var data = $.toJSON(obj);

(Отредактировано автором: 04 Сентября, 2015 - 11:56:04)

 
 Top
DelphinPRO
Отправлено: 04 Сентября, 2015 - 12:12:29
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




surrealistic pillow пишет:
array[array.length] = $(this).attr('href');

CODE (javascript):
скопировать код в буфер обмена
  1. array.push($(this).attr('href'));

surrealistic pillow пишет:
var data = "array = " + JSON.stringify( array );

не так
CODE (javascript):
скопировать код в буфер обмена
  1. var data = {'array' : array};


upd: исправил

(Отредактировано автором: 04 Сентября, 2015 - 12:14:29)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Deonis
Отправлено: 04 Сентября, 2015 - 13:17:56
Post Id



Посетитель


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


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




surrealistic pillow, для передачи на сервер массивов и объектов, преобразовывать их в json-строку - нет смысла. На что, собственно, уже намекнул DelphinPRO. Если требуется, то для объектов (не массивов), используется метод $.param(), который генерирует url-кодированную строку вида key1=val1&key2=val2&key3=val3, подобно php-функции http_build_query().
В вашем случае, это может быть реализовано таким образом:
CODE (javascript):
скопировать код в буфер обмена
  1. // собираем все ссылки в массив
  2. var links = $('a.link').map(function(i, el){
  3.     return $(el).attr('href');
  4. }).get();
  5.  
  6. /**
  7. * теперь несколько вариантов для параметра data в методе ajax:
  8. */
  9. // или передаем массив без ключа
  10. data:  links
  11. // или с ключем
  12. data:  {some_key: links}
  13. // или с ключем, преобразовав в url-кодированную строку
  14. data:  $.param({some_key: links})
Для последнего варианта, на сервере потребуется обратное преобразование с помощью функции parse_str()

surrealistic pillow пишет:
Адрес подгружаемой страницы
Путь к обработчику

UPD Пардон, поспешил и ошибся с первым вариантом (без ключа). Для него формируем объект со ссылками, а не массив:
CODE (javascript):
скопировать код в буфер обмена
  1. var links = $('a.link').get().reduce(function(o, v, i) {
  2.   o[i] = $(v).attr('href');
  3.   return o;
  4. }, {});

(Отредактировано автором: 04 Сентября, 2015 - 13:40:31)

 
 Top
surrealistic pillow
Отправлено: 04 Сентября, 2015 - 13:48:53
Post Id


Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Март 2014  


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




DelphinPRO,Deonis спасибо за разъяснения)) все работает
 
 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