2012-04-29 38 views
1

我在创建一个对象并使用jquery.json将 转换为json后,通过ajax调用php脚本(getNum.php)。现在我想处理php端的对象。 print_r($_POST['data'])不工作,也没有任何其他我试过。如何解析从jQuery ajax调用接收到的json数据php

这是我的代码:

// create object 
    var bing= new Object(); 
    bing.id = 99; 
    bing.nameList = getBingList(); 

    //create pdf 
    $.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    url: "getNum.php", 
    dataType: "html", 
    data: $.toJSON(bing), 
    success: function(data){ 
     alert(data); 
     window.location = "generateBing.php?num="+data 
    } 

    }); 
+0

你有什么文件中的'print_r'声明?你的页面包含javascript或由javascript(generateBing.php)调用的页面? – jedwards 2012-04-29 00:40:42

+0

为什么你有'dataType:“html”'? – 2012-04-29 00:41:12

+0

generateBing.php不相关。 getNum.php包含print_r代码 – Tom 2012-04-29 00:41:24

回答

2

,你需要将它发送“数据”为好。

$.ajax({ 
    type: "POST", 
    url: "getNum.php", 
    data: {data: $.toJSON(bing)}, 
    success: function(data){ 
     alert(data); 
     window.location = "generateBing.php?num="+data 
    } 
}); 

否则,你所要做的print_r($_POST)

+0

我怀疑jQuery会处理发布分层数据。 – 2012-04-29 00:48:47

+0

你会想要移除contentType,因为这样可以阻止它成为application/json。 – loganfsmyth 2012-04-29 00:49:23

+0

@loganfsmyth - 删除两者,因为它们通常不需要。如果它是一个有效的json对象,jQuery将解决它。 – adeneo 2012-04-29 00:51:51

0

因为你是直接张贴JSON对象,对$ _ POST没有参数的名称。您需要阅读POST请求的原始内容。试试这个:如果您使用print_r($_POST['data'])展示的内容

$data = json_decode(file_get_contents('php://input')); 
print_r($data); 
+0

没有任何数据是空的 – Tom 2012-04-29 00:45:16

+0

在那里,现在应该工作。正如你所提到的,contentType影响了所有这些。既然你有JSON内容类型,PHP不能自动处理它。您可以阅读请求数据并将其处理为PHP变量。 – loganfsmyth 2012-04-29 00:59:05