簡體   English   中英

當數據以JSON格式發送時,使用從php返回的數據

[英]using returned data from php when data is sent in JSON format

我目前是JSON的新手,我認為它可能真的很有用,以下是我用來將JSON對象發送到服務器端php腳本的數據格式

    // CREATE JSON OBJECT
 var EmailEntity = { "MailMembers":memberecipients , "email":"me@mail.com" } ;

               // send to php server script
        $.ajax({
        type: "POST",
        url: "engine/send-mail.php",
        dataType: "JSON",
        data: {JsonEmailEntity: JSON.stringify(EmailEntity)},
        success: function(Databack){
        alert(Databack);
         }
            });

然后是服務器端(PHP)

           // get json element and extract contents
           $Json = $_POST['JsonEmailEntity'];
           $EmailEntities = json_decode($Json,true);

           $email = $EmailEntities['email'];

           echo $email;

問題是,即使我用螢火蟲檢查了它,Javascript也不會警告任何返回的任何返回值,它表明響應實際上是已發送但未警告。 想知道Javascript錯誤在哪里

更改:

echo $email;

至:

echo json_encode($email);

調用jQuery.ajax()時, dataType屬性是服務器返回的數據的類型,而不是發送給它的數據的類型。

dataType(默認值:Intelligent Guess(xml,json,腳本或html))

類型:字符串

您期望從服務器返回的數據類型。 ...

jQuery AJAX調用期望的響應本身就是JSON,但您只是輸出一個字符串。 jQuery隱式嘗試將其解析為JSON,但失敗,並因此執行錯誤回調。

更改此:

echo $email;

到這個:

echo json_encode($email);

它應該工作。 目前,您僅在回顯數據,但不是JSON格式。

加成:

為了將來參考,您還可以執行以下操作:

$email['email'] = $EmailEntities['email']; //or "some@email.com";
$email['username'] = "some_user";

echo json_encode($email);

然后在Javascript中:

success: function(Databack){
    alert("Your username is " + Databack.username + " and your email is " + Databack.email);
}

我懷疑這可能與這條線有關

{JsonEmailEntity: JSON.stringify(EmailEntity)},

您無需對該變量進行字符串化,只需傳遞{ JsonEmailEntity: JsonEmailEntity } ,jQuery就會相應地對其進行轉換。

話雖如此,由於您是在服務器端對其進行解碼,因此我不確定該錯誤是否與之相關。

在Firebug中,如果轉到“ 控制台”選項卡,然后單擊請求,則從此處單擊“ 參數”選項卡,然后您可以看到正在發送到服務器的內容。

更改您的JavaScript ajax代碼:

   // CREATE JSON OBJECT
       var EmailEntity = { "MailMembers":memberecipients , "email":"me@mail.com" } ;

   // send to php server script
        $.ajax({
        type: "POST",
        url: "engine/send-mail.php",
        data: {JsonEmailEntity: JSON.stringify(EmailEntity)},
        success: function(Databack){
        alert(Databack);
      }
    });

因為如果您將dataType指定為JSON。 如果返回類型為json,則將執行成功函數。

或如下更改您的PHP代碼:

更改:

echo $email;

至:

echo json_encode($email);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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