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