0

我有:

var apiQuizData = {'ect stuff removed...',answers:{}};
    $.each(dataCEActiveQuiz.quiz_data, function(index, answer) {
        if(answer.selected == undefined){
            apiQuizData.answers[answer.id] = 0;
        } else {
            apiQuizData.answers[answer.id] = answer.selected;
        }
    });

    $.post(URL, apiQuizData, function(data) {

如果我通过 chrome 检查工具查看通过标题提交的表单数据,则会显示:

// url decoded
answers[28194]:112768
answers[28195]:112773
answers[28199]:112788
answers[28202]:112803
answers[28204]:112809

// url encoded
answers%5B28194%5D:112768
answers%5B28195%5D:112773
answers%5B28199%5D:112788
answers%5B28202%5D:112803
answers%5B28204%5D:112809

// query string

answers%5B28195%5D=112773&answers%5B28199%5D=112788&answers%5B28202%5D=112803&answers%5B28204%5D=112809

在 PHP 中我使用

$sent_data = file_get_contents('php://input');
$sent_data_decoded = json_decode($sent_data, true);

php接收的字符串是

&answers=&answers=&answers=&answers=&answers=

我需要对数据做些什么,以便它通过值传递给 php?

谢谢。

==================

更新 1

如果我使用

$.post(URL, JSON.stringify(apiQuizData), function(data) {

这是发送的

{...extra stuff...,"answers":{"28195":"112773","28199":"112791","28201":"112796","28202":"112800","28204":"112810"}}

从 PHP 使用json_decode(file_get_contents('php://input'), true);

{...extrastuff...}id%22%3A952077%2C%22answers%22%3A%7B%2228195%22%3A%22112

当我对数据进行 print_r 时,它是一个空数组吗?

==================

更新 2 - 工作

将 jquery 帖子更新为

    $.post(URL + 'sendCEQuizResults', {jsonstringify: JSON.stringify(apiQuizData)}, function(data) {

更新了 php 接收代码以处理我用旧方式发送数据的新方式

$sent_data = file_get_contents('php://input');

            if(substr($sent_data, 0, 13) == 'jsonstringify')
            {
                parse_str($sent_data);
                $sent_data_decoded = json_decode($jsonstringify, true);
            } else
            {
                $sent_data_decoded = json_decode($sent_data, true);
            }

出于某种原因,如果我没有将 JSON.stringify(apiQuizData) 分配给另一个对象的值,它将无法工作。浏览器似乎自己阻塞了文本,我猜是因为它本身就是一个巨大的文本字符串?没有把握。无论哪种方式,上述更新 #2 都解决了我遇到的问题。

谢谢。

4

2 回答 2

1

将对象字符串化为 JSON 字符串:

$.post(URL, JSON.stringify(apiQuizData), function(data) {
于 2013-05-02T19:36:02.603 回答
0

在我回答你的问题之前,我想鼓励你遵循“提问”的建议,以方便那些愿意帮助你的人回答你的问题。你的太含糊了,我很难理解你需要什么。


您可能需要为此使用 phpparse_str函数:

<?php
    $str = "first=value&arr[]=foo+bar&arr[]=baz";
    parse_str($str);
    echo $first;  // value
    echo $arr[0]; // foo bar
    echo $arr[1]; // baz

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

?>
于 2013-05-02T19:53:42.790 回答