Передача массива 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
Почему было так сложно найти этот ответ !? Спасибо, это именно то, что мне было нужно.
Виан Эстерхайзен

Просто как хакер! Отлично сработано! Ты рассмешил меня над собой: 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 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';

0

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.