以json格式发布

时间:2012-05-14 10:32:32

标签: jquery ajax json post

抱歉英语不好:)

我试图以json格式发布用于在php / python中编写的restapi的表单。如果我使用json,我无法访问发布的数据。请参阅下面的方案

非json帖子的代码

jQuery(document).ready(function($) {
     $.post(  
        "http://localhost:8000/api/v1/entry/?format=json",  
        {
        "body": "This will prbbly be my lst edited  post.",
        "pub_date": "2011-05-22T00:46:38",
        "slug": "another-post",
        "title": "Another Post",
        "username":"admin",
        "password":"admin"


        },  
        function(responseText){  
            $("#result").html(responseText);  
        },  
        "html"  
    );
  }) 

服务器响应

 Array
 (
 [body] => This will prbbly be my lst edited  post.
 [pub_date] => 2011-05-22T00:46:38
 [slug] => another-post
 [title] => Another Post
 [username] => admin
 [password] => admin
 )  

Json Post的代码

  jQuery(document).ready(function($) {
   var data = JSON.stringify({
    "body": "This will prbbly be my lst edited  post.",
    "pub_date": "2011-05-22T00:46:38",
    "slug": "another-post",
    "title": "Another Post",
"username":"admin",
"password":"admin"


});

 $.post(  
        "testpost.php",  
        data,  
        function(responseText){  
            $("#result").html(responseText);  
        },  
        "html"  
    );
  }) 

服务器响应

Array
(
)

2 个答案:

答案 0 :(得分:3)

好吧,你没有将值赋给任何参数,因此PHP将无法填充$_POST数组。

将其分配给参数,例如json

$.post("testpost.php", {json: data}, ...);

然后您将能够通过以下方式访问它:

$_POST['json'];

或者,如果您使用PECL,则可以致电http_get_request_body [docs]获取数据。

答案 1 :(得分:1)

这是正常响应,数据必须是键值对的数组/对象或正确编码的查询字符串,类似于key = value& key2 = value2 ... 如果你想像服务器那样获得发布的数据,你应该自己阅读输入:

$jsonDatas = file_get_contents('php://input')

您可以在js中轻松完成:

data = { json: JSON.stringify({...}) }

然后在$ _POST ['json']服务器端获得结果。

如果你想要,你可以查看我的一个类,以帮助你在这里使用php服务器端json服务:http://projects.jgotti.net/blog/15