1

我正在使用 Laravel 框架,并且正在发出 AJAX 请求以发送电子邮件。请求工作正常并且邮件已发送,问题是如果邮件发送成功与否,我无法获得服务器响应。

这是位于 views/contact/mail.blade.php 下的代码(短版):

if( mail($to, $subject, $body,$headers) )  {
    $data = array( 'text' => Lang::line('contact.mail-success')->get() );
    return Response::json($data);
} else {
    $data = array( 'text' => Lang::line('contact.mail-error')->get() );
    return Response::json($data);
}

这是jquery:

$('#contact-form').submit(function() {
        var request = $.ajax({
            url: BASE+'/contact',
            type: 'post',
            data: { name: $('#name').val(), mail: $('#email').val(), message: $('#msg').val() },
            dataType:"json",
            success: function(data){
               var message = $.parseJSON(data);
               alert(message.text); // here I get the "cannot read property of null" in the console log
            }
        });

    return false;
});

我究竟做错了什么?谢谢你的帮助。

4

3 回答 3

1

您不应该return Response::json()来自视图文件,视图应该回显从视图生成的任何输出,但在这种情况下,您需要从路由本身返回响应,因为 json 还包含标头信息。

于 2013-05-30T18:13:32.817 回答
1

由于 Laravel 使用 Response::json 发送正确的标头,因此无需在 Javascript 中解析 JSON,只需更改行

var message = $.parseJSON(data);

var message = data;
于 2013-05-30T16:19:20.223 回答
0

以 JSON 形式发送响应时,必须使用json_encode();PHP 进行编码。在完成方法成功到达后,然后将对象解析为JSON.parse();

例子 :

将php文件中的行修改为 return response()->json(json_encode($data));

将 javascript 文件中的行添加为

done(function (data){
console.log(JSON.parse(data));
console.log(data.text);
});
于 2016-12-27T10:23:58.057 回答