Laravel和vue-resource:当ajax请求出错时如何跳转?

时间:2016-09-20 10:25:34

标签: laravel vue.js

我正在使用Laravel和vue-resource,在下面的演示中:

{
  var formData = new FormData();
  formData.append('foo', 'bar');
  formData.append('pic', fileInput, 'mypic.jpg');

  this.$http.patch('/someUrl/'+itemId, formData,{
                    before(request) {
                        if (this.previousRequest) {
                            this.previousRequest.abort();
                        }
                        this.previousRequest = request;
                    }
                }).then((response) => {
                    this.items[index].price = response.data.price;
                }, (response) => {
                    //console.log(response.data);
                    window.location.href = "../../login";
                });
}

控制器:

class CartController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function update(Request $request, $id)
    {
        $goods = Goods::findOrFail($id);
        $goods->amount = $request->get('amount');
        $goods->save();
        $price = Price::findOrFail($id);
        return $price;
    }
}

update的Ajax请求访问CartController方法,
如果登录,ajax请求成功,它可以工作 如果登录状态过期,我想让它跳转到登录页面,
我测试它,调试工具中的错误是这样的:

enter image description here

但页面并没有跳跃 怎么让它跳?

3 个答案:

答案 0 :(得分:0)

您可以在auth中间件:

下添加您的网络路由
Route::group(['middleware' => 'auth'], function(){

    Route::get('/', 'HomeController@index')->name('home');
    // Add all your non-api routes.

});

这不会解决回调后的重定向,但如果您没有登录,则会阻止您访问触发请求的页面,假设您的表单位于同一个应用程序中你的API。

答案 1 :(得分:0)

您获得的错误是因为CSRF令牌。

在你的脑子部分添加这个

<meta id="csrf-token" name="csrf-token" content="{{ csrf_token() }}"/>

在Vue应用程序文件中添加此

Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#csrf-token').getAttribute('content');

关于重定向,如果用户未获得授权,请分享更多关于服务器响应的信息。

答案 2 :(得分:0)

将您的路线网址添加到VerifyCsrfToken.php文件中。因此,它将避免令牌验证。

class VerifyCsrfToken extends BaseVerifier

{

protected $except = [
    //url go here
];

}