У меня есть массив, созданный функцией .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; }
Как лучший способ для этого?
Кодируйте строку данных в 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}
dataString = []; $.ajax({ type: "POST", url: "script.php", data:{data: $(dataString).serializeArray()}, cache: false, success: function(){ alert("OK"); } });
Данные в функции 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
, но вам нужно будет справиться с тем, что нецелесообразно.
dataString предполагает, что данные отформатированы в строке (и, возможно, обозначены символом).
$data = explode(",", $_POST['data']); foreach($data as $d){ echo $d; }
если dataString не является строкой, а задает массив (что указывает ваш вопрос), используйте JSON.