Can';t解析从ajax请求到php数组的序列化表单数据

Can';t解析从ajax请求到php数组的序列化表单数据,php,ajax,pjax,Php,Ajax,Pjax,我试图解析从$.pjax请求发送到php数组的数据。 我尝试了parse_str,但返回了NULL。同样使用unserialize()的结果是: unserialize():210字节的偏移量0处出错 正确的方法是什么?我的代码如下所示: function loadNewProducts() { $.pjax.defaults.timeout = false $.pjax({ url: location.href.split('?')[0], da

我试图解析从
$.pjax
请求发送到php数组的数据。 我尝试了
parse_str
,但返回了
NULL
。同样使用
unserialize()
的结果是:
unserialize():210字节的偏移量0处出错
正确的方法是什么?我的代码如下所示:

function loadNewProducts() {
    $.pjax.defaults.timeout = false
    $.pjax({
        url: location.href.split('?')[0],
        data: {
            form: $("#dynamic-form-new-products").serialize()
        },
        container: "#new_products"
    })
}
string(210) "_csrf-backend=BaUAnGywhydYkWrYU6tBNwyju5ofhIwAw0AO60naP4NP_DHzCIbzHhPnL5Ef7wZSXtXZ2F72uzmkbT6gBZFo1g%3D%3D&NewProduct%5B0%5D%5Bproduct_id%5D=2&NewProduct%5B0%5D%5Bstart_date%5D=&NewProduct%5B0%5D%5Bend_date%5D="
$\u GET['form']
参数如下所示:

function loadNewProducts() {
    $.pjax.defaults.timeout = false
    $.pjax({
        url: location.href.split('?')[0],
        data: {
            form: $("#dynamic-form-new-products").serialize()
        },
        container: "#new_products"
    })
}
string(210) "_csrf-backend=BaUAnGywhydYkWrYU6tBNwyju5ofhIwAw0AO60naP4NP_DHzCIbzHhPnL5Ef7wZSXtXZ2F72uzmkbT6gBZFo1g%3D%3D&NewProduct%5B0%5D%5Bproduct_id%5D=2&NewProduct%5B0%5D%5Bstart_date%5D=&NewProduct%5B0%5D%5Bend_date%5D="

如果未使用$output参数,则可能会看到此问题,因为前导下划线作为PHP变量标识符的开头无效。如果没有$output,这将导致名为
$\u csrf-backend
的变量,这是不允许的。我自己无法测试它,但建议在PHP.net上使用以下用法:

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz


我建议的另一件事是尝试解析整个查询字符串
$\u SERVER['query\u string']

如果您没有使用$output参数,那么您可能会看到这个问题,因为前导下划线作为PHP变量标识符的开头无效。如果没有$output,这将导致名为
$\u csrf-backend
的变量,这是不允许的。我自己无法测试它,但建议在PHP.net上使用以下用法:

parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
echo $output['arr'][1]; // baz


我建议的另一件事是尝试解析整个查询字符串
$\u SERVER['query\u string']

我喜欢它,我正在使用Yii2并通过ajax将两个序列化表单作为数组传递,这两个表单都带有以下划线开头的csrf标记,因此unserialize()函数无法工作,parse\u str()工作得非常好!我喜欢它,我使用Yii2并通过ajax将2个序列化表单作为数组传递,这两个表单都带有以下划线开头的csrf标记,因此unserialize()函数无法工作,parse_str()工作得非常好!