it-roy-ru.com

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

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

76
krx
data: { activitiesArray: activities },

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

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

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

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

data: { activities: activities }

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

Смотрите здесь для деталей.

11
jvenema

Вы должны превратить это в строку. Вы можете сделать это, используя метод 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);
10
James Wiseman

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

  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.

9
lu1s

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

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

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

1
Gazzer

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

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

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

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

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