Отправить массив с Ajax в PHP скрипт - PullRequest
39 голосов
/ 25 января 2012

У меня есть массив, созданный функцией .push .В массиве очень большие данные.Как лучше всего отправить это в скрипт PHP?

   dataString = ??? ; // array?
   $.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

script.php:

  $data = $_POST['data'];

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

Как лучше всего это сделать?

Ответы [ 5 ]

105 голосов
/ 25 января 2012

Кодируйте строку данных в JSON.

dataString = ??? ; // array?
var jsonString = JSON.stringify(dataString);
   $.ajax({
        type: "POST",
        url: "script.php",
        data: {data : jsonString}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

В вашем PHP

$data = json_decode(stripslashes($_POST['data']));

  // here i would like use foreach:

  foreach($data as $d){
     echo $d;
  }

Примечание

Когда вы отправляете данные через POST, они должны быть в виде пары ключ-значение.

Таким образом

data: dataString

неправильно.Вместо этого:

data: {data:dataString}

7 голосов
/ 25 января 2012
 dataString = [];
   $.ajax({
        type: "POST",
        url: "script.php",
        data:{data: $(dataString).serializeArray()}, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

http://api.jquery.com/serializeArray/

3 голосов
/ 25 января 2012

Данные в jQuery ajax() функция принимает анонимные объекты в качестве входных данных, см. документация .Вот пример того, что вы ищете:

dataString = {key: 'val', key2: 'val2'};
$.ajax({
        type: "POST",
        url: "script.php",
        data: dataString, 
        cache: false,

        success: function(){
            alert("OK");
        }
    });

Вы также можете написать запрос POST / GET самостоятельно, например key=val&key2=val2, но вам придется справиться с побегом, что нецелесообразно.

1 голос
/ 25 января 2012

dataString предполагает, что данные форматируются в виде строки (и могут быть разделены символом).

$data = explode(",", $_POST['data']);
foreach($data as $d){
     echo $d;
}

, если dataString не строка, а влияет на массив (что указывает ваш вопрос), используйте JSON.

0 голосов
/ 01 июля 2018

Если вы пытались отправить одномерный массив и jquery преобразовывал его в значения, разделенные запятыми>: (* ​​1002 *, следуйте приведенному ниже коду и будет представлен фактический массив на php и не все, разделенные запятыми бык ** это.

Допустим, вы должны присоединить один размерный массив с именем myvals.

jQuery('#someform').on('submit', function (e) {
    e.preventDefault();
    var data = $(this).serializeArray();

    var myvals = [21, 52, 13, 24, 75]; // This array could come from anywhere you choose 
    for (i = 0; i < myvals.length; i++) {
        data.push({
            name: "myvals[]", // These blank empty brackets are imp!
            value: myvals[i]
        });
    }

jQuery.ajax({
    type: "post",
    url: jQuery(this).attr('action'),
    dataType: "json",
    data: data, // You have to just pass our data variable plain and simple no Rube Goldberg sh*t.
    success: function (r) {
...

Теперь внутри php, когда вы делаете это

print_r($_POST);

Вы получите ..

Array
(
    [someinputinsidetheform] => 023
    [anotherforminput] => 111
    [myvals] => Array
        (
            [0] => 21
            [1] => 52
            [2] => 13
            [3] => 24
            [4] => 75
        )
)

Прошу прощения за мой язык, но существует огромное количество Rube-Goldberg решений, разбросанных по всему Интернету и особенно на SO, но ни одно из них не является элегантным или не решает проблему фактической публикации одномерный массив до php через ajax post . Не забудьте распространить это решение.

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