【问题标题】:Problem with AJAX Post request in laravellaravel 中的 AJAX Post 请求问题
【发布时间】:2023-03-28 14:08:01
【问题描述】:

我有一个选择框,当每个项目被选中时,都会发送一个 ajax 请求。 但我的代码不起作用。我得到状态 404,这个错误显示在控制台中

exception: "Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException", file: "F:\\source\\boiler\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php", line: 179, … 

我的路线:

 Route::group(['namespace' => 'BuyCrypto' , 'prefix' => 'crypto'], function() {
          Route::post('/calculateBuyAmount' , [BuyCryptoController::class , 'calculateAmount'])->name('calculate.amount');
        });

ajax 代码:

$("select#user_select_crypto").change(function(e) {

    $('#calculat_user_buy').block({
        message: '<i class="icon-spinner4 spinner"></i>',

        overlayCSS: {
            backgroundColor: '#fff',
            opacity: 0.8,
            cursor: 'wait'
        },
        css: {
            border: 0,
            padding: 0,
            backgroundColor: 'transparent'
        }
    });

    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    e.preventDefault();
    $.ajax({
        url: "panel/crypto/calculateBuyAmount",
        dataType: 'json',
        data: {

            user_select_crypto: $("input[name=user_select_crypto]").val(),
            user_value_request: $("input[name=user_value_request]").val(),
        },
        success: function(result) {

            console.log(result)
        },
        error: function(result) {

            console.log(result)

        },
    });
});

什么问题?

【问题讨论】:

    标签: ajax laravel


    【解决方案1】:

    这是因为 laravel 没有得到你给路由的完整 URL。你必须给出正确的路线。为此,您可以使用您的命名路线,如下所示。

    url: "{{ route('calculate.amount') }}",
    

    或者,如果您在一个 javascript 文件中并且不能使用刀片,则只能提供带有 / 斜杠的 URL。一切都会好起来的。它发生在发布请求中。

    您可以提供如下网址

    url: "/panel/crypto/calculateBuyAmount",
    

    更新

    现在你面对methodNotAllowedException,因为现在你发送一个get请求,因为你没有在ajax方面提到你正在做一个post请求。默认情况下,ajax 将发送一个get 请求。所以你需要告诉ajax使用post方法。像这样type: "POST"像下面这样

    $.ajax({
            url: "/panel/crypto/calculateBuyAmount",
            dataType: 'json',
            type : 'POST'
            data: {
    
                user_select_crypto: $("input[name=user_select_crypto]").val(),
                user_value_request: $("input[name=user_value_request]").val(),
            },
            success: function(result) {
    
                console.log(result)
            },
            error: function(result) {
    
                console.log(result)
    
            },
        });
    

    【讨论】:

    • 我编辑了它,但现在又返回了这个错误:Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException
    • 因为现在您发送get 请求,因为您没有在ajax 方面提及您正在发帖。默认情况下,ajax 将发送一个 get 请求。所以你需要告诉ajax使用post方法。像那样type: "POST",
    【解决方案2】:

    在这种情况下,最好使用命名路由作为您的路由名称。

    $.ajax({
        url: "{{ route('calculate.amount') }}",   // use your name route here
        type : 'POST',   // need to add your request type post 
        dataType: 'json',
        data: {
    
            user_select_crypto: $("input[name=user_select_crypto]").val(),
            user_value_request: $("input[name=user_value_request]").val(),
        },
        success: function(result) {
    
            console.log(result)
        },
        error: function(result) {
    
            console.log(result)
    
        },
    });
    

    【讨论】:

    • 我编辑了它,但现在又返回了这个错误:Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException
    • 查看我更新的答案,您需要添加请求类型 POST。
    猜你喜欢
    • 2018-01-28
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2021-08-25
    • 2013-07-01
    • 2014-06-20
    • 2019-04-04
    • 2021-11-01
    相关资源
    最近更新 更多