在php中解码JSON POST

时间:2013-05-19 10:04:24

标签: php ajax json

我在我的ajax中使用dataType:'json'data: {'post':val}将数据发送到我的php文件。 val中的data: {'post':val}是变量 发送到php文件的数据是[object Object]所以,在将它分配给php变量之前,我需要解码它。我是JSON的新手并不太了解。
我尝试了$id=$_POST['post'];,但由于发送的数据是JSON格式,因此不起作用 如何发送'普通'数据或解码数据而不删除dataType:'json',因为我的php文件有一个数组,由json_encode发送回ajax
注意:在Ajax中完美地赋值。 (当我用alert({post:val}['post']);提醒时,显示的结果就是我指定的内容。

嗯......这是我的更新 Ajax(我不小心发错了)在以前的代码中): -

function op_prof(obj) {
    var xval = obj.id;
    var dataString = "{'u_search':'"+xval+"'}";

    $.ajax({
    type: "POST",
    url: '/script/profile.php',
    data: dataString,
    dataType: 'json',
    cache: false,
    success: function(data) {
        console.log(data);
    }
  });
};

3 个答案:

答案 0 :(得分:1)

dataType指定您希望从服务器返回的数据类型。它不会导致数据以JSON格式发送。< / p>

如果设置为PHP程序的数据为[object Object],则会导致某些对象被字符串化并放入发送的数据中。您还没有共享足够的代码来确切地确定它是什么。

答案 1 :(得分:1)

你应该使用

data: {post: dataString}

相反,在php中,使用json_decode($_POST['post']);。通过这种方式,发布的数据有其名称(此处为“post”),您可以使用WebKit检查器或Firebug查看它。

如果您使用data: dataString,则$_POST中不会有任何数据,但您仍然可以使用dataString在PHP脚本中检索$_SERVER["QUERY_STRING"],这是url编码的。所以完成的行应该是$dataString = urldecode($_SERVER["QUERY_STRING"]);

此外,如果dataString是从一个简单的非嵌套对象进行字符串化,则可以使用

data: {key1: value1,
       key2: value2}

然后用$value1 = $_POST['key1'];在php中检索值,节省时间编码和解析JSON。

答案 2 :(得分:1)

问题是您正准备将数据作为字符串发送。没有必要这样做。 data param需要一个数据对象,所以给它一个对象。然后,在服务器端,该对象中的每个数据将作为单独的post var。

到达

JS:

$.ajax({
    url: '/script/profile.php',
    data: {foo: 'bar'}, //<-- our data is an object, not a string to be decoded
    type: 'post'
}).done(function(response) {
    alert(response); //<-- alerts "received data "bar"!"
});

PHP

<?php
if (isset($_POST['foo'])) echo 'received data "'.$_POST['foo'].'"!';
?>

正如昆汀所提到的,dataType参数指示了您希望从服务器返回的数据格式,而不是您发送的格式。