你有一个设置为数组的PHP $ _POST变量吗?

时间:2011-05-28 20:45:25

标签: php ajax arrays jquery post

我正在使用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变量作为普通数组处理?

4 个答案:

答案 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']都应该是数组。你使用的方括号是不必要的,但不会破坏任何东西。

See the PHP manual on the subject

答案 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的原因。