【问题标题】:Laravel AJAX can't get responseLaravel AJAX 无法得到响应
【发布时间】:2013-05-30 16:05:05
【问题描述】:

我正在使用 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;
});

我做错了什么?感谢您的帮助。

【问题讨论】:

  • 控制台中 ajax 调用的原始响应是什么?你能检查一下吗?我认为在刀片视图中放置“return”语句不是正确的做法。
  • 使用 console.log(data),我得到一个“空”的答案。

标签: php ajax laravel


【解决方案1】:

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

var message = $.parseJSON(data);

var message = data;

【讨论】:

  • 在新帐户下发布,哎呀。太傻了。
  • 感谢您的洞察力,但它仍然无法正常工作。它可能与路由有关吗?查看codehappy.daylerees.com 上的“JSON 响应”部分,我没有任何代码。
  • 你能不能 console.log(data) (没有任何类型的解析或任何东西)
【解决方案2】:

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

【讨论】:

  • 天哪,我不知道他说的是查看文件,我以为这是从控制器完成的。
  • 对不起,我没有说清楚。现在,我使用与我在 controllers/contact.php 下的视图相同的代码创建了一个控制器,并使用以下代码创建了一个路由:Route::post('/contact', array('as' => 'contact', 'uses' => 'contact@ajax_mail')); 现在我在控制台中收到“POST mysite.com/mysite/public/fr/contact 404 (Not Found)”错误
  • 你能澄清一下这是 Laravel 3 还是 Laravel 4 吗?我猜是 Laravel 3,但只是想确定一下。
【解决方案3】:

在以 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);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2020-06-10
    • 2019-11-11
    相关资源
    最近更新 更多