Отправить массив с Ajax в PHP скрипт

31

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

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

Как лучший способ для этого?

4 ответа

81
Лучший ответ

Кодировать строку данных в 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}

  • 11
    Зачем использовать JSON.stringify ? Что не так только с data: {data: dataString} ?
  • 0
    @Rocket: Полагаю, вы могли бы это сделать, и в этом случае Jquery сериализует массив.
Показать ещё 3 комментария
6
 dataString = [];
   $.ajax({
        type: "POST",
        url: "script.php",
        data:{data: $(dataString).serializeArray()}, 
        cache: false,

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

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

  • 0
    и как я могу в следующий раз прочитать это в файле PHP?
  • 1
    Поскольку serializeArray работает путем создания строки JSOn, вам сначала нужно будет использовать json_decode на стороне PHP
Показать ещё 1 комментарий
3

Данные в функции 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, но вам нужно будет справиться с тем, что нецелесообразно.

  • 0
    Это не сработало для меня, однако data: { id_arr: [array variable goes here]} будут доступны как массив $_POST['id_arr'] в PHP
1

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

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

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

  • 0
    dataString это только пример. Я не должен использовать это, но я не знаю, что я должен использовать
  • 1
    data: { id_arr: [array variable goes here]}, будет доступна как $_POST['id_arr'] как массив в PHP

Ещё вопросы

Сообщество Overcoder
Наверх
Меню