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