2016-08-06 108 views
0

我使用ajax发布请求,然后用jquery函数“load”刷新网站的一部分,它运行良好,但是当我尝试重做这篇文章时,它说MethodNotAllowedHttpException我认为问题在laravel csrf保护,因为我刷新整个页面后,它工作正常 我的问题是如何保存csrf令牌,即使我刷新网站的一部分? **在此先感谢**(ᵔᴥᵔ)MethodNotAllowedHttpException - CSRF -laravel 5.2

这些都是路由

Route::post('/upvote', array(
    'uses'=> '[email protected]', 
    'as'=> 'upvote')); 

Route::post('/putcomment', array(
    'uses'=> '[email protected]', 
    'as'=> 'putcomment')); 

我觉得这个问题是不是在路线,因为它工作正常,但是当AJAX加载网页的一部分,它停止工作,这是我的装载场 $("#partOfSite").load('theURLofSITE #partOfSite')

的只有一部分,如果我重新加载它变成工作再次

回答

0

我解决了这个问题,因为@Gadzhev说是不是CSRF验证问题是与路线问题。

路由在ajax函数中定义,但没有在表单中,所以当我用jquery加载表单时,忘记了有一个函数执行这个表单并开始提交没有ajax的表单,所以它会导致这个问题,这意味着路线是错误的。

所以要解决这个问题,只是重装与DIV要load.or如果您使用的功能触发像

$('.button').on('click',function(){alert('clicked')})

其更改为AJAX功能:

$('body').on('click','.button',function(){alert('clicked')})

这里有一些问题可以帮到你:

Jquery Event won't fire after ajax call

why does jquery's .load() ignore <script>?

1

它通常建议通过CSRF令牌的网页页面meta标签(内部有<head></head>标签)

<meta name="_token" content="{{ csrf_token() }}" /> 
+0

好了,现在我知道如何做到这一点THANKS〜(˘▾˘〜)(〜˘▾˘)〜\(•◡•)/ –

+0

NO这是行不通的ಠ〜ಠ –

+0

这只会在页面中提供。你必须发送每个jQuery请求 –

1

你可以显示你的路线吗?丢失的CSRF令牌的错误异常通常是TokenMismatchException。 MethodNotAllowedHttpException表示路由有问题。

路径未定义或您没有传递正确的动词。这里有一个例子AJAX调用的PUT方法:

function myAjaxCall() { 

    var formData = { 
     '_method': 'PUT' 
     // Some other data you want to pass to your controller 
    } 

    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf_token"]').attr('content') 
     } 
    }); 

    $.ajax({ 
     url: url, 
     type: "POST", 
     data: formData, 
     success: function (response) { 
      // Your login on success 
     }, 
     error: function (response) { 
      // Handle error 
     } 
    }); 
} 
+0

请看看我更新问题 –

+0

你还可以包括你的意见和控制器的方法吗?理解你的应用会更容易 – Gadzhev

相关问题