Php Can';t使用json_decode从ajax post打印json

Php Can';t使用json_decode从ajax post打印json,php,jquery,ajax,json,Php,Jquery,Ajax,Json,我正在使用ajax将数据发布到php脚本,以便完成工作。。。基本上,我采用所有的形式变量,并创建json。。。然后获取此json并将其发送到控制器脚本: function createJSON() { jsonObj = []; $("input[class=form-control]").each(function() { var id = $(this).attr("id");

我正在使用ajax将数据发布到php脚本,以便完成工作。。。基本上,我采用所有的形式变量,并创建json。。。然后获取此json并将其发送到控制器脚本:

function createJSON() {
                 jsonObj = [];
                 $("input[class=form-control]").each(function() {
                    var id = $(this).attr("id");
                    var value = $(this).val();
                    item = {}
                    item [id] = value;
                    jsonObj.push(item);
                 });

             jsonData = JSON.stringify(jsonObj);

             var request = $.ajax({
             url: "../../../../ajax/signupController.php",
             type: "POST",
             data: jsonData,
             dataType: "html"
            });

            request.done(function( msg ) {
            console.log(msg);
            });

            request.fail(function( jqXHR, textStatus ) {
                alert( "Request failed: " + textStatus );
            });

            }
我的代码可以很好地访问php脚本,当我在php中使用“print_r”打印输出时,我得到以下结果:

Array
(
[0] => stdClass Object
    (
        [mail-firstname] => FName
    )

[1] => stdClass Object
    (
        [mail-lastname] => Lname
    )
)
我的问题是,我找不到元素。。。我试过:

$data = json_decode(file_get_contents('php://input'));  
foreach ($data as $key => $value) { 
print "<p>$key | $value</p>";
}

但是任何有破折号的值都会导致脚本失败。。。例如,如果名称是“mail firstname”,PHP会认为它是mail和firstname…

问题在于,您的值在数据中嵌套了一个额外的级别。而且它们都有不同的钥匙,所以很难找到。最好使用
id
作为顶级数组的键,而不是嵌套它们:

jsonObj = {};
$("input[class=form-control]").each(function() {
    var id = this.id
    var value = this.value;
    jsonObj[id] = value;
 });
然后您应该将PHP更改为使用第二个参数
json\u decode()
,这样您就可以得到一个关联数组,而不是
stdClass
对象:

$data = json_decode(file_get_contents('php://input', true));
我不太清楚为什么需要发送JSON。为什么不直接使用:

data: jsonObj;

然后你可以访问输入作为
$\u POST['mail-firstname']
,等等。

json\u decode(,true)
:)嗨,Barmar,我不知道你可以创建一个数组,然后将它作为POST VAL发送。。。我以为你必须将数据格式化为json才能发送。。。我会试试你的建议。谢谢你花时间。我无法让post工作,但我可以利用你的建议删除数据嵌套。。。然后我可以通过“print$data->{'mail-firstname'}”访问每个值;非常感谢!
data: jsonObj;