我希望将带有数组(可以是任意长度)的ajax请求作为1参数发送,例如:
mandatoryFields = [];
for (i = 1; i <= post_type_max_elements; i++) {
...
var mandatoryItem = []
mandatoryItem['optionName'] = optionName;
mandatoryItem['optionValue'] = optionValue;
}
var data = {
action: 'update_mandatory_fields',
post_type: select_post_type,
mandatoryFields: mandatoryFields
};
jQuery.ajax({
type: 'POST',
dataType: "json",
data: data,
...
似乎,这不起作用,因为没有定义服务器参数mandatoryFields。 哪种方式最好?
谢谢!
答案 0 :(得分:2)
您可以使用JSON.stringify()
将数组转换为字符串。
JSON.stringify()方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以选择替换值,或者如果指定了replacer数组,则可以选择仅包含指定的属性。
在你的例子中:
$.ajax({
type: "POST",
url: url,
data: {yourData: JSON.stringify(data)},
success: function(response){
//Callback function - do something if the request succeeded
}
});
请注意,您也可以使用$.post()
代替$.ajax()
。
要使用php
重建数组,您可以使用json_decode($_POST['yourData']);
答案 1 :(得分:1)
jQuery,默认情况下,以PHP方式序列化数组:
$.ajax({
url: "http://example.com/",
data: {
foo: [1, 2]
}
})
将序列化为http://example.com/?foo[]=1&foo[]=2
。如果您的服务器端框架支持这种参数传递方式,您应该在参数对象中重建一个数组。
如果没有,并且您的服务器支持同名的多个参数值,您可以$.ajaxSetup({ traditional: true });
;这会使ajax
序列化为http://example.com/?foo=1&foo=2
。
maja提到的第三个选项是明确地对所有复合值进行JSON编码(以及在服务器端,JSON解码)。
由于您未指定服务器端解决方案的内容,因此我无法告诉您可以使用的前两个优雅方案中的哪一个;第三,手动的是万无一失的。
答案 2 :(得分:0)
我是在客户上做的:
mandatoryFields[mandatoryFields.length]= JSON.stringify( {optionName: optionName, optionValue: optionValue} )
在服务器上我看到$ _POST(php)var有值:
update_mandatory_fields $_POST::Array
(
[action] => update_mandatory_fields
[post_type] => post
[mandatoryFields] => Array
(
[0] => {\"optionName\":\"post_type_mandatory_selection:post::element_1\",\"optionValue\":\"post_type_mandatory_selection:post::element_1:C\"}
)
)
在圆圈中我没有找到正确的方法如何处理字符串 [0] =&gt;
{\"optionName\":\"post_type_mandatory_selection:post::element_1\",\"optionValue\":\"post_type_mandatory_selection:post::element_1:C\"}
foreach( $mandatoryFields as $nextMandatory ) {
$optionValue= json_decode($nextMandatory['optionValue']); // NULL
$optionName= json_decode($nextMandatory['optionName']); // NULL
这是正确的方法吗?