我正在使用AJAX将一些数据放入我的数据库中。我正在使用JSON将数据提交到PHP页面。我正在使用开机自检请求。您可以将其中一个 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 变量作为普通数组处理?
当你将
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']
都应该是数组。 您使用的方括号是不必要的,但不会破坏任何内容。
请参阅有关该主题的 PHP 手册。
当然可以 - 它可以是简单数组(以整数作为键(或关联数组。这只取决于您提交的 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')
(,
你可以从JS(JSON(发布一个对象,并使用json_decode将其json_decode到服务器(PHP(上。
您可能可以这样做,但您必须像这样完全手动完成:
{
"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 的原因。