url具有参数时出现错误“方法不允许” ajax jquery(Laravel)

时间:2018-10-18 11:35:22

标签: jquery ajax laravel

javascript调用url带有参数时,返回错误“不允许使用方法”。

HTML
1.- <a href="{{ URL::to('acceso', ['option'=>'1']) }}">Acceso</a>
2.- <a href="{{ URL('acceso') }}">Acceso 2</a>

第一个选项返回错误。第二种选择效果很好。

这是路线:

Route::get('/acceso/{option?}', function ($option = '') {   
   return view('acceso_Usuario')->with('option', $option);
});

Route::post('call', 'example_Controller@function_example');

这是控制器:

class example_Controller extends Controller
{
   public function function_example(Request $request)
   {
       if ($request->ajax()) {

           return response()->json([
           ]);

       }
   } 
}

这是JavaScript

$(document).ready(function() {
    var route = "call";
    var token = $("#token").val();

    var parameters=
    {
    };

    $.ajax({
        url: route,
        headers: {'X-CSRF-TOKEN': token},
        type: 'post',
        dataType: 'json',
        data: parameters,
        contentType: 'application/x-www-form-urlencoded',
        success: function (data) {

        },
        error: function (msj) {
            alert("Error Ajax);
        }
    });

 });

可以帮助我的人! :)

4 个答案:

答案 0 :(得分:1)

您的JavaScript正在发出POST请求,但匹配的路由被定义为仅允许GET,HEAD请求(with Route::get())。

答案 1 :(得分:1)

更改您的Ajax网址

var url = '{{url("call")}}';

在post方法中以这种方式传递csrf令牌

headers: {

    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

},

答案 2 :(得分:0)

将路线更改为

 var route = '{{url("call")}}';

这将为您的路线生成一个绝对URL

答案 3 :(得分:0)

已经解决!我之所以解释自己的问题,是因为我喜欢在其他同事遇到相同问题时总是能解决问题。

问题在于,向URL添加参数会更改javascript文件的根目录。我尝试过的解决方案是“动态地”引入网站的根目录,这样Ajax会正确查找该功能。

$(document).ready(function() {

   **var currentDirectory = window.location.href;**
   **var rootDirectory = currentDirectory.substring(0, currentDirectory .indexOf("public") + 6);**

   **var route = rootDirectory + "/call";**
   var token = $("#token").val();

   var parameters=
   {
   };

    $.ajax({
    url: route,
    headers: {'X-CSRF-TOKEN': token},
    type: 'post',
    dataType: 'json',
    data: parameters,
    contentType: 'application/x-www-form-urlencoded',
    success: function (data) {

    },
    error: function (msj) {
        alert("Error Ajax);
    }
   });

});

谢谢大家的帮助! :)