Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

data: { activitiesArray: activities },

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

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

Ответ 2

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

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

data: { activities: activities }

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

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

Ответ 3

Вам нужно превратить это в строку. Вы можете сделать это, используя метод stringify в библиотеке JSON2.

http://www.json.org/

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

Код выглядит примерно так:

var myJSONText = JSON.stringify(myObject);

So

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

Станет:

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

Вам нужно будет обратиться к гуру PHP о том, как обращаться с этим на сервере. Я думаю, что другие ответы здесь содержат решение.

Данные могут быть возвращены с сервера аналогичным образом. То есть вы можете вернуть его обратно в объект.

var myObject = JSON.parse(myJSONString);

Ответ 4

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

  • Сгладьте свой javascript-объект (json) с помощью var st = JSON.stringify(your_object);

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

  • Декодируйте свои данные при обработке на стороне сервера: $data = json_decode($_POST['data']);

Чтобы он... вы можете свободно использовать свои данные.

Многомерные массивы и одиночные массивы обрабатываются как обычные массивы. Для доступа к ним просто выполните обычный $foo[4].

Ассоциативные массивы (объекты javsacript) обрабатываются как объекты php (классы). Для доступа к ним просто делайте это как классы: $foo->bar.

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

$.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;
}

Ответ 8

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

Ответ 9

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

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

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

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