0

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

索引.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

4 回答 4

1

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

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

  • 简单的。

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

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

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

尝试阅读REST 简介,以更好地了解设计模式及其用途。当然,如果您不想,您不需要从头开始编写框架,因为已经有几个基于 PHP 的开源实现,例如Recess PHP Rest Framework

希望这可以帮助!

于 2013-08-13T18:09:51.827 回答
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 :(
}
于 2013-08-13T17:34:38.787 回答
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),那么它就行不通了。

于 2013-08-13T21:34:52.420 回答
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'];
?>
于 2013-08-13T17:50:57.087 回答