Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать массив данных собранных querySelectorAll, через Ajax? (https://javascript.ru/forum/misc/84139-kak-peredat-massiv-dannykh-sobrannykh-queryselectorall-cherez-ajax.html)

Katy93 14.06.2022 17:24

Как передать массив данных собранных 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);
                }
            }
     });
      
		}

рони 14.06.2022 17:50

Katy93,
success: function(responce){ jQuery('#content_show'+num).html(responce);}

Katy93 14.06.2022 20:33

На самом деле мне нужно было понять почему на сервере вместо цельного элемента массива я получаю только один символ.
Например при записи файла через 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]);
}

рони 14.06.2022 20:46

Katy93,
ждите специалиста по php

Nexus 14.06.2022 23:50

Цитата:

Сообщение от 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]
})

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


Часовой пояс GMT +3, время: 10:20.