Передача масиву JavaScript PHP через jQuery $ .ajax


79

Я хочу маніпулювати масивом JavaScript у PHP. Чи можна зробити щось подібне?

$.ajax({
       type: "POST",
       url: "tourFinderFunctions.php",
       data: "activitiesArray="+activities,
       success: function() {
            $("#lengthQuestion").fadeOut('slow');
       }
    });

Діяльність - це одновимірний масив, такий як:

var activities = ['Location Zero', 'Location One', 'Location Two'];

Скрипт не завершується, коли я спробую це ... Як я можу це виправити?


Відповіді:


147
data: { activitiesArray: activities },

Це воно! Тепер ви можете отримати до нього доступ на PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>

10
Чому цю відповідь було так важко знайти !? Дякую, це саме те, що мені потрібно було.
Vian Esterhuizen

Так просто, як хакер! Молодці! Ти змусив мене сміятися над собою: D.
Arashtad Ltd,

12

Вам потрібно буде закодувати свій масив як JSON перед тим, як його відправити, або ви просто отримаєте трохи сміття на іншому кінці.

Оскільки все, що ви надсилаєте, це масив, ви можете просто зробити:

data: { activities: activities }

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

Детальніше див. Тут .


11

Вам потрібно перетворити це на рядок. Це можна зробити за допомогою методу stringify у бібліотеці JSON2.

http://www.json.org/

http://www.json.org/js.html

Код буде виглядати приблизно так:

var myJSONText = JSON.stringify(myObject);

Так

['Location Zero', 'Location One', 'Location Two'];

Стане:

"['Location Zero', 'Location One', 'Location Two']"

Вам доведеться звернутися до гуру PHP про те, як це зробити на сервері. Я думаю, що інші відповіді тут наближають рішення.

Дані можна повернути із сервера подібним чином. Тобто ви можете перетворити його назад в об'єкт.

var myObject = JSON.parse(myJSONString);

9

Я знаю, що, можливо, пізно відповісти на це, але це у мене спрацювало чудово:

  1. Стрингіфікуйте свій об'єкт javascript (json) за допомогою var st = JSON.stringify(your_object);

  2. Передайте дані POST як "рядок" (можливо, використовуючи jQuery: $.post('foo.php',{data:st},function(data){... });

  3. Розшифруйте свої дані при обробці на стороні сервера: $data = json_decode($_POST['data']);

Ось і все ... Ви можете вільно використовувати свої дані.

Багатовимірні масиви та одиночні масиви обробляються як звичайні масиви. Для доступу до них просто виконайте звичайні дії $foo[4].

Асоціативні масиви (об'єкти javsacript) обробляються як php-об'єкти (класи). Для того, щоб отримати доступ до них просто зробити це як класи: $foo->bar.


2

Я повинен бути таким:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })

1

Використовуйте функцію серіалізації JQuery

http://docs.jquery.com/Ajax/serialize

Серіалізація зазвичай використовується для підготовки вхідних даних користувача, які будуть розміщені на сервері. Серіалізовані дані мають стандартний формат, сумісний майже з усіма мовами програмування та фреймворками на стороні сервера .


1

Це спрацювало для мене:

$.ajax({
    url:"../messaging/delete.php",
    type:"POST",
    data:{messages:selected},
    success:function(data){
     if(data === "done"){

     }
     info($("#notification"), data);
    },
    beforeSend:function(){
         info($("#notification"),"Deleting "+count+" messages");
    },
    error:function(jqXHR, textStatus, errorMessage){
        error($("#notification"),errorMessage);
    }
});

І це для вашого PHP :

$messages = $_POST['messages']
foreach($messages as $msg){
    echo $msg;
}

1

Використовуйте вбудовану функцію PHP додавання операнда масиву до потрібного імені змінної.

Якщо ми додаємо значення до масиву Javascript наступним чином:

acitivies.push('Location Zero');
acitivies.push('Location One');
acitivies.push('Location Two');

Його можна надіслати на сервер наступним чином:

$.ajax({        
       type: 'POST',
       url: 'tourFinderFunctions.php',
       'activities[]': activities
       success: function() {
            $('#lengthQuestion').fadeOut('slow');        
       }
});

Зверніть увагу на цитати навколо діяльності []. Значення будуть доступні наступним чином:

$_POST['activities'][0] == 'Location Zero';
$_POST['activities'][1] == 'Location One';
$_POST['activities'][2] == 'Location Two';

0

Це тому, що PHP зчитує ваше значення як рядок. Якщо я не хочу передавати свої дані як об'єкт (як у попередніх відповідях, які теж добре), я просто роблю це у своєму PHP:

 $activitiesString = $_POST['activitiesArray'];
 $activitiesArray = (explode(",",$activitiesString));

Останній рядок розбиває рядок на біти після кожної коми. Тепер $ activitiesArray - це також масив. Це працює, навіть якщо немає коми (лише один елемент у вашому масиві javascript).

Щасливого кодування!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.