我是Laravel的新手,并使用Ajax进行某些功能。
//Route
Route::post('some/thing/','Controller@Method');
//jQuery
$('.some_class').click(function(){
var var1 = $('.some').val();
var val2 = $(".another").val();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
//this part
url: "some/thing/",
type:"POST",
data: { var1: var1,val2: val2,_token: CSRF_TOKEN},
success:function(response){
console.log("working");
},
error:function(){
console.log("error");
}
});
});
//controller
public function Method(Request $object){
if(isset($_POST['val1'])){//do something}
}
问题在AJAX的URL参数中。当我为URL提供价值时,例如some / thing /,它给我404错误,显示未找到 www.siteurl / some / thing / some / thing / 以及保持URL值时空白,然后工作。但是那样的话,我认为这不是一个好习惯。
我在公用文件夹中有单独的.js文件。 控制器位于不同目录,刀片文件位于不同目录。 Laravel版本5.6.22
谢谢。
答案 0 :(得分:1)
当您将网址写入ajax时,它会尝试实现某些/事物/某些/事物/ 修理;为您的路线命名,然后使用该名称作为ajax网址。
//Route
Route::post('some/thing/','Controller@Method')->name('yourRouteName');
//jQuery
$('.some_class').click(function(){
var var1 = $('.some').val();
var val2 = $(".another").val();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
//this part
url: "{{ route('yourRouteName') }}",
type:"POST",
data: { var1: var1,val2: val2,_token: CSRF_TOKEN},
success:function(response){
console.log("working");
},
error:function(){
console.log("error");
}
});
});
答案 1 :(得分:1)
我认为您必须将Url更改为绝对路径:
如果您正在处理刀片文件:
从以下网址更改网址:url: "some/thing/",
要发送网址:{{url('some/thing')}},
如果您正在处理外部Js文件:
从以下网址更改网址:url: "some/thing/",
要发送网址:url: "/some/thing/",
答案 2 :(得分:0)
使用绝对路径而不是相对路径。将/
附加在网址前,例如"/some/thing/"
$('.some_class').click(function(){
var var1 = $('.some').val();
var val2 = $(".another").val();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
//this part
url: "/some/thing/",
type:"POST",
data: { var1: var1,val2: val2,_token: CSRF_TOKEN},
success:function(response){
console.log("working");
},
error:function(){
console.log("error");
}
});
});
希望这会有所帮助。
答案 3 :(得分:0)
您可以在 VerifyCsrfToken 中间件的 $ except数组中添加 route ,以忽略 csrf令牌确认
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
"/some/thing/"
];
}