如何处理 AJAX 传递给 PHP 脚本的 2 组 JSON 数据

How to handle 2 sets of JSON data passed by AJAX to a PHP script

提问人:rte76 提问时间:11/9/2023 最后编辑:Barmarrte76 更新时间:11/9/2023 访问量:28

问:

这是我第一次涉足 JSON/AJAX 的世界

基本上,我需要将 2 组数据传递给 PHP 文件。一组用于保存在MySQL表中,secons集由PHP脚本使用。

我的 Javascript 生成 2 组数据,格式为 JSON 字符串:

第一个是格式:[7,6]

它由 PHP 文件将使用的 2 个变量组成,但与主数据集无关。

第二个数据集由 n 个数组组成,每个数组包含用于更新表的三个变量:

[
    {
        "id": 1,
        "stringvar": "string",
        "date": "08/11/2023"
    },
    {
        "id": 2,
        "stringvar": "another string",
        "date": ""
    }
]

我一直在阅读,似乎我有 2 个选择:

  1. 将 2 组数据作为包含在单个 JSON 对象中的单独数据集传递,方法是将 2 个数组字符串化,然后在发送中组合:

     var data1 = JSON.stringify(txt);
    
     var data2 = JSON.stringify(txt1);
    
    xhr.send({data1,data2});
    
  2. 将它们组合成一个 JSON 数组:

    [
        {
            "a": 7,
            "b": 6
        },
        {
            "id": 1,
            "stringvar": "string",
            "date": "08/11/2023"
        },
        {
            "id": 2,
            "stringvar": "another string",
            "date": ""
        }
    ]
    

我尝试单独发布每个集合,并且毫不费力地将第一组提取到 2 个 PHP 变量中,第二组提取并写入表。

因此,我的问题是在发送两组数据时处理数据,所以我的问题是:

  1. 一次传递两组数据的最佳方式是什么?(最好的我的意思是最有效的 - 如果不是上述之一,请告诉我!

  2. PHP 应该如何处理传递数据的拆分?

php json ajax

评论

0赞 ADyson 11/9/2023
如果使用 Content-Type: application/json 发送请求,则需要发送单个 JSON 对象或数组。PHP 可以很容易地解码 JSON,然后你只需从第一个数组索引中获取第一位数据,然后从第二个索引中获取第二位数据。与发送嵌入在传统 form-url 编码变量中的两个单独的 JSON 对象相比,此 IMO 在逻辑和语义上也更有意义。混合数据格式很少会有好结果。至少它增加了不必要的复杂性。
0赞 ADyson 11/9/2023
相关: Javascript:使用 Ajax 发送 JSON 对象,然后使用 PHP 接收 JSON POST
0赞 ADyson 11/9/2023
P.S. 真的不一样......目前尚不清楚为什么在将其放入组合数组时对其进行了更改。{ "a": 7, "b": 6 }[7, 6]
0赞 ADyson 11/9/2023
附注当它一起发送时,你必须使用 JS 组合数据集,并且只能组合最终的结果。不要单独串化每个位,那样将无法正常工作。stringify
1赞 ADyson 11/9/2023
不确定你测试了什么,但我刚刚放入 JSONLint 中,它是完全有效的。[[7,6],{"id":1,"stringvar":"string","date":"08/11/2023"},{"id":2,"stringvar":"another string","date":""}]

答:

1赞 Barmar 11/9/2023 #1

我会将它们组合在一个容器对象中,以便您可以为每个部分使用命名键。

var response = {
    "txt": txt,
    "txt1": txt1
};
var data = JSON.stringify(response);
xhr.send(data);