2016-08-06 147 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

相關問題