簡體   English   中英

發送JSON到PHP並獲得響應

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM