我目前是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;
问题是,即使我用firebug检查它,Javascript也不会提醒任何返回的任何返回值,它显示响应实际已发送但未被警告。 想知道Javascript错误在哪里
答案 0 :(得分:0)
变化:
echo $email;
为:
echo json_encode($email);
答案 1 :(得分:0)
调用dataType
时jQuery.ajax()
属性是服务器返回的数据类型,而不是发送给它的数据类型。
dataType(默认值:Intelligent Guess(xml,json,script或html))
类型:字符串
您期望从服务器返回的数据类型。 ...
jQuery AJAX调用期望响应本身就是JSON,但你只是输出一个字符串。 jQuery隐式尝试将其解析为JSON,失败,结果执行错误回调。
答案 2 :(得分:0)
改变这个:
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);
}
答案 3 :(得分:0)
我怀疑它可能与这一行有关
{JsonEmailEntity: JSON.stringify(EmailEntity)},
您不需要对该变量进行字符串化,您只需传递{ JsonEmailEntity: JsonEmailEntity }
,jQuery就会相应地对其进行转换。
话虽如此,由于您在服务器端解码它,我不确定错误是否与它有关。
在Firebug中,如果您转到控制台标签,然后点击该请求,请点击 Params 标签,您可以看到发送到的内容服务器。
答案 4 :(得分:0)
更改您的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,则将执行success函数。
或者更改您的Php代码如下:
变化:
echo $email;
为:
echo json_encode($email);