繁体   English   中英

JSON或JS对象通过AJAX POST传递给PHP的最有效方式

[英]Most efficient way for JSON or JS object to be passed along with Form Data via AJAX POST to PHP

从表面上看,这似乎是一个重复的问题。 请注意,我已经阅读了所有相关的帖子,没有找到任何明确的答案和/或这里的问题是非常不同的。 甚至某些方面的某些指示或材料澄清具体问题也会有所帮助。 我不是在寻找勺子喂食。

这是问题:

我有一个表单,我有一些其他元数据(缺少一个更好的术语)被发送到服务器,其中包括配置参数。 这些都需要与PhP后端处理的表单数据一起使用,并返回一些复杂的JS和HTML标记。

不可否认,我不是JSON的常规用户,但我的阅读指出使用JSON作为非表单数据,并将表单数据单独序列化并将其分配给另一个属性,如:

var ser_data = $(form_selector).serialize();

var meta_data = { //Just for example
    name: 'John Doe',
    age:    62,
    address: '22 Park Avenue'
};

然后将.ajax中的数据传递为:

data_sent = data_sent = {'meta_data':meta_data, 'form_data':ser_data};

some_promise = $.ajax({
       url : '../php/json_test.php', 
       dataType: 'json',
       type : 'POST',
       cache    : false,
       data : data_sent
});

在PhP方面,我必须在多个级别导航$ _POST []以获取数据。 此外,表单数据丢失隐式URL解码。

当然,一种方法是手动构造序列化字符串,以附加到表单序列化字符串,如

form_data_serialized...&name='John doe'&age=62... 

我一起走错了路吗? 有没有更好更简单的方法? 谢谢!

为什么不反过来呢? 将您的元数据创建为JSON字符串并将其添加到表单中的隐藏输入字段,然后POST 您的表单数据被解码为$_POST ,您可以从那里提取和解码您的JSON元数据。

.serialize只是创建一个参数字符串,例如, foo=bar&foobar=2 考虑到这一点,添加额外的参数是基本的字符串连接。

var data_sent = $.param(meta_data) + "&" + ser_data;

meta_data转换为param字符串,然后将序列化的表单数据附加到其中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM