我正在学习如何一起使用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;
?>
答案 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),那么它将不起作用。