将JSON发送到PHP并获得响应

时间:2013-08-13 17:30:19

标签: php jquery asynchronous

我正在学习如何一起使用jQuery和PHP。这是我的第一次尝试,我觉得我几乎得到了这个概念。但是,我没有解决的问题。当我将一个JSON对象发布到PHP脚本并尝试返回其中一个参数时,我收到以下错误:“试图获取非对象的属性...”

的index.html:

<!DOCTYPE html>
<html>
    <head>
        <script src="http://code.jquery.com/jquery-git2.js"></script>
        <meta charset=utf-8 />
        <title>JS Bin</title>
        <style id="jsbin-css"></style>
    </head>
    <body>
        <button onClick="postData();">Submit me!</button>
        <script>
            function postData() {
                var myData = {
                    'firstName' : 'John',
                    'lastName' : 'Doe'
                };   

                $.ajax( {
                    type: "POST",
                    url: "postData.php",
                    contentType: "application/json",
                    data: myData,
                    success: function(msg){ 
                        alert(msg);
                    },
                    error: function(err) {
                         alert('error!' + err);
                    }
                });
            }
        </script>
    </body>
</html>

postData.php:

<?php
    $input = file_get_contents('php://input');
    $jsonData = json_decode($input);    
    $output = $jsonData->{'firstName'};
    echo $output;
?>

4 个答案:

答案 0 :(得分:1)

通过更多工作,您可以使用REST客户端实现此目的,该客户端将自动处理数据类型转换和URL解析等。

列举使用REST架构的一些优点:

  • 简单。

  • 您可以使用缓存,加载平衡等轻松扩展您的解决方案。

  • 允许您在逻辑上分隔您的URL端点。

  • 它使您可以灵活地轻松更改实施,而无需更改客户端。

尝试阅读A Brief Introduction to REST以更好地了解设计模式及其用途。当然,如果你不愿意,你不需要从头开始编写框架,因为已经存在几个基于PHP的开源实现,例如Recess PHP Rest Framework

希望这有帮助!

答案 1 :(得分:0)

json_decode(取决于PHP版本)默认返回数组,而不是对象。访问它的正确方法是:

$output = $jsonData['firstname'];

你还希望它返回一个关联数组,所以传递true作为json_decode的第二个参数。

$jsonData = json_decode($input, true);  

可能发生的事情是JSON无效,在这种情况下PHP返回null。你可以检查一下:

if ($jsonData = json_decode($input, true) === null) {
    // Do stuff!
} else {
    // Invalid JSON :(
}

答案 2 :(得分:0)

我用jquery的函数post把它简单一些。 我希望你发现它很有用:

首先是你的html和js:

<!DOCTYPE html>
      <html>
      <head>
      <script src="http://code.jquery.com/jquery-git2.js"></script>
      <meta charset=utf-8 />
      <title>JS Bin</title>
      <style id="jsbin-css">
      </style>
      </head>
      <body>
        <button onClick="postData();">Submit me!</button>
      <script>
      function postData() {
        $.post(
            "postData.php",
            {
                firstName : 'John',
                lastName : 'Doe'
            },
            function(msg)
            {
                alert(msg);
            }
        );
      }

      </script>
      </body>
      </html>

那么你的php:

<?php
    echo $_REQUEST['firstName']." - ".$_REQUEST['lastName'];
?>

答案 3 :(得分:0)

我终于明白了:

JS:

function postData() {
var myData = {
  firstName: 'John',
  lastName: 'Doe'
};     

$.ajax({
    type: "POST",
    url: "postData.php",
    data: JSON.stringify(myData),
    success: function(msg){ 
        alert(msg);
    },
    error: function(err){
      alert('error!' + JSON.stringify(err));
    }
});
}

PHP:

<?php
$input = file_get_contents('php://input');
$jsonData = json_decode($input);
$output = $jsonData->{'firstName'};
echo $output;
?>

解码时你不要把“true”作为第二个参数,因为那时,它不是JSON而是一个关联数组(或者我读过)。如果我把json_decode($ input,true),那么它将不起作用。