我正在使用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;
});
我做错了什么?谢谢你的帮助。
因为Laravel用Response::json发送正确的报头,所以不需要在Javascript中解析json,只需更改
行var message = $.parseJSON(data);
var message = data;
你不应该从视图文件中获取return Response::json()
,视图应该返回从视图生成的任何输出,但在这种情况下,你需要返回路由本身的响应,因为json也会包含头信息。
以JSON的形式发送响应时,必须在PHP中使用json_encode();
进行编码。成功到达done方法后,将对象解析为JSON.parse();
的例子:
将php文件中的行修改为return response()->json(json_encode($data));
在javascript文件中添加一行
done(function (data){
console.log(JSON.parse(data));
console.log(data.text);
});