我正在使用AJAX将一些数据放入我的数据库中。我正在使用JSON将数据提交到PHP页面。我正在使用POST请求。你可以将其中一个POST变量设置为数组吗?下面我有完整的AJAX请求,但这里是我将数据的两部分设置为数组的部分:
"content[]" : testContentArray,
"content_attr[]" : testContentAttributes,
下面是我的完整AJAX(使用jQuery):
$.ajax({
type: "POST",
url: "../includes/create_test_main.ajax.php",
data: {"tags" : $('#testTags').val(),
"title" : $('#testTitle').val(),
"subject" : $('#testSubject').val(),
"description" : $('#testDescription').val(),
"content[]" : testContentArray,
"content_attr[]" : testContentAttributes,
"user_id" : user_id},
success:
function(testId) {//redirect Page
window.location.href = "http://localhost/nvr_forget/public_html/test/" + testId + "/";
}
});
};
如果是这样做的话,我将如何在PHP端处理它?将$ _POST变量作为普通数组处理?
答案 0 :(得分:3)
将data
对象中的数组传递给$.ajax
时,会将其解析为name[]=value
格式。这是使用$.param
完成的,因此我将使用它来说明:
jQuery.param({'foo': [1, 2, 5]})
// "foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=5"
%5B
和%5D
是uri编码的方括号。这是将同一密钥的多个值发送到服务器的常用方法。 PHP将其解析为数组,因此在这种情况下:
var_export($_POST['foo']);
// array ('1', '2', '5')
因此,在您的代码中,$_POST['content']
和$_POST['content_attr']
都应该是数组。你使用的方括号是不必要的,但不会破坏任何东西。
答案 1 :(得分:0)
当然你可以 - 它可以是简单数组(用整数作为键)或关联数组。它只取决于您提交的JSON对象。
例如,如果您提交以下JSON对象:
var data = {
'a': 'test123',
'b': [
'x',
'y',
'z'
],
'c': {
'testing': 'abc',
'blah': 'qwerty'
}
}
$_POST
中将包含以下元素:
$_POST['a']
- 包含字符串test123
,$_POST['b']
- 包含数组(array('x','y','z')
),$_POST['c']
- 也包含数组,但是关联(array('testing'=>'abc','blah'=>'qwerty')
),答案 2 :(得分:0)
你可以用JS(JSON)发布一个对象,用json_decode在服务器(PHP)上发布json_decode。
答案 3 :(得分:0)
您可以这样做,但您必须完全手动执行此操作:
{
"content[0]": "a",
"content[1]": "b",
"content[2]": "c",
"content[multi][0]": "d"
}
$_POST['content']
将如下所示:
Array(
0 => "a",
1 => "b",
2 => "c",
multi => Array(
0 => "d"
)
)
只是简单地说:
{
"blob" : JSON.stringify(data_or_array_or_whatever)
}
在PHP中,您可以通过以下方式检索它:
$data = json_decode($_POST['blob'], true);
这需要旧版浏览器的json2.js库。
我会选择后者,就像前者一样,你最终可能会编写自己的序列化程序:P - 这正是我们拥有JSON的原因。