[英]Send JSON to PHP and get a response
我正在學習如何一起使用jQuery和PHP。 這是我的第一次嘗試,我覺得自己快要明白了。 但是,我沒有解決一個問題。 當我向PHP腳本發布JSON對象並嘗試返回參數之一時,出現以下錯誤:“試圖在...中獲取非對象的屬性”
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;
?>
通過更多的工作,您可以使用REST客戶端實現此目的,該客戶端將自動處理數據類型轉換和URL解析等操作。
列舉使用REST體系結構的一些優點:
簡單。
您可以使用緩存,負載平衡等輕松擴展解決方案。
允許您在邏輯上分隔URL端點。
它使您可以靈活地輕松更改實施而無需更改客戶端。
嘗試閱讀REST簡介,以更好地了解設計模式及其用途。 當然,如果您不想的話,也不需要從頭開始編寫框架,因為那里已經有一些基於PHP的開源實現,例如Recess PHP Rest Framework 。
希望這可以幫助!
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 :(
}
我用jquery的函數發布將它簡化了一點。 希望你覺得它有用:
首先你的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'];
?>
我終於想通了:
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),那么它將無法正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.