Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.06.2022, 17:24
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

Как передать массив данных собранных querySelectorAll, через Ajax?
Здравствуйте мне нужно передать массив данных через Ajax, которые были собраны querySelectorAll? Вот фрагмент кода:

jQuery(document).ready(function(){
		ajaxQuery();
		function ajaxQuery()
		{
      var arr = [];
      var allBlock = document.querySelectorAll("div.social_locker");
      for(var i = 0; i < allBlock.length; i++)
      {
        arr.push(allBlock[i].id);
      }
      
      
      $.ajax({
             type: "POST",
             data: "action=showBlock&arr="+JSON.stringify(arr),
             url: "/action.php",
             dataType: "json",
             success: function(responce)
             {
                if(responce.result=="success")
                {
                   jQuery('#content_show'+num).html(responce.message);
                }
            }
     });
      
		}
Ответить с цитированием
  #2 (permalink)  
Старый 14.06.2022, 17:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Katy93,
success: function(responce){ jQuery('#content_show'+num).html(responce);}
Ответить с цитированием
  #3 (permalink)  
Старый 14.06.2022, 20:33
Кандидат Javascript-наук
Отправить личное сообщение для Katy93 Посмотреть профиль Найти все сообщения от Katy93
 
Регистрация: 28.12.2018
Сообщений: 138

На самом деле мне нужно было понять почему на сервере вместо цельного элемента массива я получаю только один символ.
Например при записи файла через file_put_contents записывается только один символов. Нужно было массив пропустить через json_deocode.
Было
Цитата:
if($_POST["action"]=="showBlock")
{
$arr = $_POST["arr"];
file_put_contents('arr.txt',$arr[0]);
}
Стало
Цитата:
if($_POST["action"]=="showBlock")
{
$arr = json_decode($_POST["arr"]);
file_put_contents('arr.txt',$arr[0]);
}
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2022, 20:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Katy93,
ждите специалиста по php
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2022, 23:50
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от Katy93
На самом деле мне нужно было понять почему на сервере вместо цельного элемента массива я получаю только один символ.
Потому что передавали данные на сервер в неправильном формате.
Ваши данные имеют следующий вид:
action=showBlock&arr=[1,2,3]

На сервере это будет _POST с 2-мя ключами: «action» и «arr», но последний будет не массивом как вы ожидаете, а строкой.
Чтобы сервер прочитал ключ «arr» как массив, данные должны иметь следующий вид:
action=showBlock&arr[]=1&arr[]=2&arr[]=3


Проще всего изменить content-type запроса на «application/json», а данные передавать следующим образом:
data: JSON.stringify({
    action: 'showBlock',
    arr: [1, 2, 3]
})

В этом случае сервер корректно разберет передаваемые вами данные.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать даные через ajax и принять их на php vovaJsc AJAX и COMET 10 20.11.2019 20:24
как сделать задержку вывода данных через ajax ghost666 AJAX и COMET 2 27.05.2018 16:21
Передача через AJAX большого объема данных yambbkru AJAX и COMET 3 20.06.2015 15:18
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как передать дополнительный параметр через AJAX? allanmiln AJAX и COMET 2 17.11.2013 02:21