使用 Ajax 将数组发送到 PHP 脚本

IT技术 php javascript jquery ajax
2021-01-28 23:20:40

我有由函数.push制作的数组在数组中是非常大的数据。将它发送到 PHP 脚本的最佳方式是什么?

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

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

脚本.php:

  $data = $_POST['data'];

  // here i would like use foreach:

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

最好的方法是什么?

5个回答

将您的数据字符串编码为 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}

友好的提醒,始终验证您的帖子值。
2021-03-20 23:20:40
为什么使用JSON.stringify只是有什么问题data: {data: dataString}
2021-04-03 23:20:40
@Rocket:我想你也可以这样做,在这种情况下,Jquery 会序列化数组。
2021-04-08 23:20:40
那么你就不需要了json_decode$_POST['data']已经是一个数组了。
2021-04-10 23:20:40
 dataString = [];
   $.ajax({
        type: "POST",
        url: "script.php",
        data:{data: $(dataString).serializeArray()}, 
        cache: false,

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

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

由于serializeArray通过创建 JSOn 字符串来工作,因此您首先需要json_decode在 PHP 端使用
2021-03-31 23:20:40
我建议放弃serializeArray,只是做data: {data: dataString}然后$_POST['data']将是一个数组。
2021-04-05 23:20:40

jQueryajax()函数中的数据接受匿名对象作为其输入,请参阅文档所以你正在寻找的例子是:

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,但您必须自己处理逃避,这是不切实际的。

这对我不起作用,但是data: { id_arr: [array variable goes here]}可以$_POST['id_arr']在 PHP 中作为数组访问
2021-03-27 23:20:40

如果您一直在尝试发送一维数组并且jquery 正在将其转换为逗号分隔值 >:(然后按照下面的代码将实际数组提交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 上,但没有一个是优雅的,也没有解决通过 ajax post实际发布一维数组php的问题不要忘记传播这个解决方案。

dataString 表明数据格式为字符串(并且可能由字符分隔)。

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

如果 dataString 不是字符串而是实际上是一个数组(您的问题所指的),请使用 JSON。

dataString 这只是示例。我不必使用这个,但我不知道我必须使用什么
2021-03-29 23:20:40
data: { id_arr: [array variable goes here]},$_POST['id_arr']作为数组在 PHP 中访问
2021-03-30 23:20:40