Laravel Ajax URL问题

时间:2018-06-21 08:23:44

标签: laravel laravel-5

我是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

谢谢。

4 个答案:

答案 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/"

        ];
    }