laravel返回{"error":"Unauthenticated."},在jquery的ajax里面怎么获取?

用jquery的ajax发送一个请求,如果没有登录,就跳转到登录页,代码如下:

    $.ajax({
        url: "/article/" + article_id,
        method: "POST",
        dataType: "json"
    })
        .done(function(data) {
            console.log(data);
            
        })
        .fail(function(error) {
            console.log(error);
            //location.href='/login';
        });

在没有登录时测试,上面的代码返回了这样的信息:

{"error":"Unauthenticated."}

问题:
应该怎样获取这个error?在fail里面还是done里面?

阅读 5.4k
6 个回答

fail

这个方法参数是xhr对象

.fail(function(xhr) {
    console.log(xhr.status);
    //location.href='/login';
});

fail是ajax请求失败,服务器出现问题的情况。而done应该是请求成功,不管返回结果是什么,服务器做了回应。

在.done还是在.fail,你在两个函数里面打印一下看看进入哪一个函数,然后看看打印出来的是什么东西。个人认为,一个ajax请求的完整过程应该是前台发起请求,然后向后台出发,后台接收到请求,然后根据前台请求的数据返回对应的信息,中间其实还有很深奥的知识。.done是指你这个ajax请求过程完整的走完并且后台给了返回数据,先不说数据状态是true/false;.fail是这个ajax请求根本没有完整的走完,中间有中断,所以你是看不见后台的返回数据的,看见的是http协议返给你的请求报告信息;.always是不论你这个请求时成功了还是失败了都会执行的函数。jquery官网的解释应该更加准确清晰一些。至于你说的这个返回信息{"error":"Unauthenticated."},如果这个信息是后台返给你的就在.done里面获取。

laravel,在.done

你看下 HTTP 状态码。如果是 2XX,就是 done,否则 fail。

$.ajax({
        url: "/article/" + article_id,
        method: "POST",
        dataType: "json",
        error : function(xhr){
         if (xhr.status == 401) {
            alert('login');
          }
      },
      success:function(){
      }
    })
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进