Передача массива JavaScript в PHP через jQuery $ .ajax - PullRequest
77 голосов
/ 06 января 2010

Я хочу манипулировать массивом JavaScript в PHP. Можно ли сделать что-то подобное?

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

Деятельности - это одномерный массив, например:

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

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

Ответы [ 8 ]

144 голосов
/ 06 января 2010
data: { activitiesArray: activities },

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

<?php $myArray = $_REQUEST['activitiesArray']; ?>
11 голосов
/ 06 января 2010

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

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

data: { activities: activities }

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

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

10 голосов
/ 06 января 2010

Вам нужно превратить это в строку. Это можно сделать с помощью метода 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 голосов
/ 07 апреля 2012

Я знаю, что может быть слишком поздно, чтобы ответить на этот вопрос, но у меня это получилось очень хорошо:

  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 голосов
/ 19 ноября 2014

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

$.post(submitAddress, { 'yourArrayName' : javaScriptArrayToSubmitToServer },
  function(response, status, xhr) {
    alert("POST returned: \n" + response + "\n\n");
  })
1 голос
/ 26 марта 2017

Используйте встроенную функциональность 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';
1 голос
/ 20 июня 2013

Это сработало для меня:

$.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 голос
/ 06 января 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...