Передача массива 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'];

Скрипт не завершается, когда я пытаюсь это сделать ... Как я могу это исправить?

krx
источник

Ответы:

147
data: { activitiesArray: activities },

Это оно! Теперь вы можете получить к нему доступ в PHP:

<?php $myArray = $_REQUEST['activitiesArray']; ?>
Валентин Голев
источник
10
Почему было так сложно найти этот ответ !? Спасибо, это именно то, что мне было нужно.
Виан Эстерхайзен
Просто как хакер! Отлично сработано! Ты рассмешил меня над собой: D.
Arashtad Ltd
12

Вы захотите закодировать свой массив как JSON перед его отправкой, или вы просто получите мусор на другом конце.

Поскольку все, что вы отправляете, - это массив, вы можете просто сделать:

data: { activities: activities }

который автоматически преобразует массив за вас.

Подробности смотрите здесь .

Jvenema
источник
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.

lu1s
источник
2

Я должен быть таким:

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
masterdany88
источник
1

Используйте функцию JQuery Serialize

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';
Chelista
источник
0

Это потому, что PHP читает ваше значение как строку. Если я не хочу передавать свои данные как объект (как в предыдущих ответах, которые тоже подходят), я просто делаю это в своем PHP:

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

Последняя строка разбивает строку на биты после каждой запятой. Теперь $ activityArray также является массивом. Он работает, даже если нет запятой (только один элемент в вашем массиве javascript).

Удачного кодирования!

Боярышник
источник