将带括号的javascript对象作为键传递给PHP
Passing javascript objects with brackets as keys to PHP
假设我在JavaScript中有这个对象,它是这样构建的:
var obj = {};
var fields = ['table_name[field_name]', 'tale_name[field_name_2]']
for(var i; i < fields.length; i++){
obj[fields[i]] = someBulkOfData;
}
当登录控制台时,obj将输出
{
table_name[field_name] : {...},
tabke_name[field_name_2] : {...}
}
这一切都很好,直到我通过jQuery.ajax().通过PHP传递对象
当我用PHP收到请求时,数组如下所示:
[
['table_name[field_name'] => ...,
['table_name[field_name_2'] => ...
]
因此,在发送AJAX请求和用PHP接收数据之间的某个地方,每个键的最后一个方括号都会消失。
有人能向我解释一下为什么会发生这种情况,以及是否有一个巧妙的方法来解决这个问题吗?
我有一个解决方案的标准,那就是我不能更改键(比如"table_name''[field_name'']")。
您尝试过使用$.serialize()
吗?
使用serialize将javascript对象转换为可以使用AJAX轻松传输的字符串,如下所示:
var ajaxableString = $(obj).serialize();
您可以通过重组JS对象来解决这个问题:
{
table_name : {
field_name_1 : {...},
field_name_2 : {...}
},
another_table : {
...
}
}
这样就可以避免这种奇怪的命名约定。
此外,我怀疑您对我们隐瞒了一些事情。this和PHP之间有一些(操作),可能在您的AJAX代码中,您没有告诉我们。也许您正在将此对象序列化为字符串,并将字符串作为一个查询参数传递给服务器。此序列化步骤可能是原因。
但为了确定,如果发送的数据格式完美,您可以检查调试器的Net部分并检查请求标头。
据我所知,jQuery.ajax
接受JS对象作为数据,并将其完美地转换为查询字符串。这样,您就不需要手动序列化它。
多亏了@fab,该解决方案可以使用JSON:对数据进行编码
$.ajax({
data : {
obj:JSON.stringify(obj)
},
...
});
在PHP中:
json_decode($_REQUEST['obj']);
这将输出一个非常好的stdClass对象,并保留密钥。
相关文章:
- 如何在ng-click中传递php对象
- 将javascript解析为php对象
- 如何将PHP对象序列化为JavaScript对象(不是JSON)
- 通过JavaScript(JSON)填写带有PHP对象的表单
- 使用 jQuery 工具提示插件(或任何其他方法)显示带有 PHP 对象属性的工具提示
- 如何存储PHP对象以使用JavaScript单击访问其数据
- 概念 - 从 PHP 对象创建客户端验证
- 将php对象传递给javascript
- 在滚动中动态创建更多php对象
- 带有引用的PHP对象数组
- 在使用两种语言时,如何决定是使用JavaScript对象还是使用PHP对象
- 将可重复字段选项保存到PHP对象数组
- 将PHP对象传递给ajax PHP脚本
- 如何在HTML中显示和更新PHP对象
- 将AJAX PHP对象转换为字符串并回显结果
- 如何通过连续的AJAX调用来维护PHP对象
- 使用锚标记上的on-click函数将PHP对象传递给javascript
- 如何将php对象数组转换为javascrript对象
- 如何从ajax获得php对象
- 如何设置一个PHP对象的会话在一个超链接点击