当数据以JSON格式发送时,使用来自php的返回数据

时间:2013-02-07 12:42:56

标签: php javascript jquery ajax json

我目前是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错误在哪里

5 个答案:

答案 0 :(得分:0)

变化:

echo $email;

为:

echo json_encode($email);

答案 1 :(得分:0)

调用dataTypejQuery.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);