此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯

Posted

技术标签:

【中文标题】此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯【英文标题】:The GET method is not supported for this route. Supported methods: POST. laravel 5.8 Ajax 【发布时间】:2019-08-12 05:46:42 【问题描述】:

我正在尝试更多地了解如何将来自 ajax 请求的数据保存到 laravel 上的数据库中,这种情况下的数据是原始(JSON 格式)数据,只是为了看看它是如何工作的,如果我不添加它,它可以正常工作代码(注意保存到数据库中)

保存部分

 $input = Input::get('name');
 $json = new JsonTest;
 $json->json = $input;
 $json->save();

它工作正常但是当我在代码中从上面有这部分时(保存部分) 它给出了一个错误

   The GET method is not supported for this route. Supported methods: POST.

那么我怎样才能将文本区域保存到数据库中。数据库database

web.php

 Route::post('/customer/ajaxupdate', 'AjaxController@updateCustomerRecord')- 
 >name('jsonTest');

控制器

public function updateCustomerRecord(Request $request)


    if(request()->ajax())

        $input = Input::get('name');
        //$input = $request->all();
        $json = new JsonTest;
        $json->json = $input;
        $json->save();

        return response()->json(['status' => 'succes', 'message' => 'saved in database']);

     else 

        return response()->json(['status' => 'fail', 'message' => 'this is not json']);

    


刀片

 <!DOCTYPE html>
 <html lang="en">
<head>
<title>javascript - read JSON from URL</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<meta name="csrf-token" content=" csrf_token() " />
</head>

<body>
<textarea  oninput="myFunction()" id="input" name="input" style="height: 
500px;width: 500px">
</textarea>

<script>
const warning = 'This json is not correctly formatted';
const text = status: "failed", message: "this is not correct json format";

$.ajaxSetup(
    headers: 

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

    
);

function myFunction()

    let input = document.getElementById("input").value;

    try 
        let id = JSON.parse(input);
        if (id && typeof id === "object") 
            $.ajax(
                method: 'POST', // Type of response and matches what we said in the route
                url: ' route('jsonTest') ', // This is the url we gave in the route
                data: 'id' : id, // a JSON object to send back
                success: function(response) // What to do if we succeed
                    console.log(response);
                ,
                error: function(jqXHR, textStatus, errorThrown)  // What to do if we fail
                    console.log(JSON.stringify(jqXHR));
                    console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
                
            );
        
    
    catch (e) 
        console.log(warning);
        console.log(text);
    
    return false;

</script>

</body>
</html>

【问题讨论】:

您能否在您的开发工具控制台中检查您的网络选项卡以查看发送的请求是什么? 说json不能为NULL 您在哪里看到“不支持 GET 方法...”错误? 当你去网络然后点击来自ajax的路由时,它会打开另一个不支持GET方法的网页 好的,那是因为您正试图在您的网络浏览器中查看路线(这是一个 GET 请求)。所以实际的错误是JSON cannot be null ...你在哪里看到这个错误? 【参考方案1】:

如果您使用的是 insomnia 和 postman 等客户端应用,请不要忘记添加

Accept application/json

到标题。

【讨论】:

【参考方案2】:

我曾经遇到过同样的问题,问题出在从 http 到 https 的自动重定向。 所以我在调用api的时候把url改成了https本身。

【讨论】:

【参考方案3】:

您的 POST 数据中似乎没有包含 name 键。试试这个:

$.ajax(
    method: 'POST', // Type of response and matches what we said in the route
    url: ' route('jsonTest') ', // This is the url we gave in the route
    data: 'name' : 'testing', // <-- this is your POST data
    success: function(response) // What to do if we succeed
        console.log(response);
    ,
    error: function(jqXHR, textStatus, errorThrown)  // What to do if we fail
        console.log(JSON.stringify(jqXHR));
        console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
    
);

【讨论】:

以上是关于此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯的主要内容,如果未能解决你的问题,请参考以下文章

错误:此路由不支持 POST 方法。支持的方法:GET、HEAD。 - 使用 laravel livewire

此路由不支持 GET 方法。支持的方法:POST。拉拉维尔 8

此路由不支持 POST 方法。支持的方法:GET、HEAD。",...

此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST。在 laravel 中

laravel向我显示此错误此路由不支持POST方法。支持的方法:GET,HEAD,PUT,DELETE

此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯