无法使用json_decode从ajax帖子打印json

时间:2014-10-25 04:30:40

标签: php jquery ajax json

我正在使用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>";
}

但我无法得到数组元素......我收到错误...在解码文件内容后访问数组时我缺少什么?

感谢。

更新

修改了foreach:

foreach($data as $key=>$value){
    print $value->ccyear;//now I can get at individual elements
}

但是有任何值因为DASH导致脚本失败...例如,如果名称是“mail-firstname”,PHP认为它是邮件和名字......

1 个答案:

答案 0 :(得分:2)

问题是您的值在数据中嵌套了一个额外的级别。而且他们每个人都有不同的钥匙,因此很难找到他们。如果你使用id作为顶级数组的键而不是嵌套它们会更好:

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

然后你应该改变你的PHP以使用json_decode()的第二个参数,所以你得到一个关联数组而不是stdClass个对象:

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

我不确定你为什么需要发送JSON。为什么不直接使用:

data: jsonObj;

然后您可以以$_POST['mail-firstname']等方式访问输入