本文是根据laravel5.2的情况所写,其他版本可能会有所不同。
在laravel里有这么一种方法可以验证表单值:

$this->validate($request, [
    //title和content字段都是必填的
    'title' => 'required|unique:posts|max:255',
    'content' => 'required',
]);

根据laravel手册,我们可以知道,在AJAX请求中使用validate方法时,Laravel不会生成重定向响应。取而代之的,Laravel生成一个包含验证错误信息的JSON响应。该JSON响应会带上一个HTTP状态码422。(http://laravelacademy.org/post/3279.html

于是笔者试着写了这么一段JS代码来提交表单:

$(function () {
  $('#submit').click(function () {
      //定义post的url,对应form的action值
    var $url = "{{url('discussions/create')}}";
      //将表单的数据转换成数组
    var $data = $('#createform').serializeArray();

    $.post({
      url: $url,
      data: $data,
    })
    .done(function () {
      alert('OK');
    })
    .fail(function (data) {
      alert('failed');
    });
  });
})

然后笔者试着提交了空数据,果不其然浏览器接到了表单的返回值。
于是笔者试着取出这些错误信息:

...

.fail(function(data)){
  alert(data.title);
}

...

但是结果竟然返回了一个undefined!真是让人百撕不得骑姐。
后来想了想,万一这个data里不是个JSON而是个包含了很多信息的object呢?
就想到了console.log函数,笔者试着console.log(data)看了看控制台里的输出,果然是个object
错误信息则包含在responseText里。
这下就简单了,把responseText取出来转换成JSON再取值:

...

.fail(function(data)){
  alert(JSON.parse(data.responseText).title[0]);
}

...

大功告成!

最后修改:2016 年 11 月 30 日 07 : 46 PM
如果觉得我的文章对你有用,请随意赞赏