2017-06-01 59 views
0

我喜歡這樣的觀點:如何將AJAX放入全局js中?

<input type="file" style="display: none" id="test"> 

當文件調用,它將調用AJAX

我把我的阿賈克斯main.js(myshop \資源\資產\ JS \ main.js)

這是全球性的js。我把所有的js放在那裏。我也把我的AJAX有

我把我的AJAX在main.js這樣的:

var _token = $('input[name="_token"]').val(); 
console.log(_token); 
$('#test').on("change", function(){ 
    data = new FormData(); 
    $.ajax({ 
     url: window.Laravel.baseUrl+'/product/addImage', 
     type: "POST", 
     data: { data: data, _token: _token }, 
     enctype: 'multipart/form-data', 
     processData: false, // tell jQuery not to process the data 
     contentType: false // tell jQuery not to set contentType 
    }).done(function(data) { 
     console.log(data); 
    }); 
}); 

我的路線是這樣的:

Route::post('product/addImage', '[email protected]'); 

我的控制器是這樣的:

public function addImage(Request $request) 
{ 
    dd('test'); 
    // dd($request->all()); 
} 

執行時,控制檯選項卡存在如下錯誤:

POST http://myshop.dev/product/addImage 500(內部服務器錯誤)

和網絡選項卡上存在錯誤是這樣的:

TokenMismatchException在VerifyCsrfToken.php線68:

哪有我解決了這個錯誤?

ajax是否可以放置在全球js?

+0

參考:https://stackoverflow.com/questions/37663432/tokenmismatchexception-in-verifycsrftoken-php-line-67-on-laravel-using-ajax – eeya

+0

@eeya,看看我的問題。我已經更新了它的參考。但它是一樣的。而當我'console.log(_token);',令牌存在 –

回答

2

您可以通過兩種方式解決此問題:

你可以使用

<meta name="csrf-token" content="{{ csrf_token() }}" /> // add this under head tag 
And before Ajax call add this:- 
$.ajaxSetup({ 
    headers: 
    { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

或者其他的(簡單)的方式,你的app\Http\Middleware/VerifyCsrfToken.php裏面添加

protected $except = [ 
    'product/addImage', 
]; 

希望它能幫助!

+1

真的很喜歡第一種方法,自從我開始使用laravel以來,我一直在***。blade.php裏面的腳本標記中定義_token。這似乎sooo更清潔 –

+0

感謝讚賞@SérgioReis – kunal

+1

@kunal,我嘗試你第一種方式。有用。沒有錯誤。但是,當我在addImage方法中添加'dd($ _ FILES);'時,響應顯示數組爲空:'[]'。如果它顯示上傳的照片數組 –

1

記住文件添加到數據

data = new FormData(); 
data.append("test", $("#fileInput")[0].files[0]) 
+1

太好了。有用。謝謝 –

相關問題