繁体   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