laravel中的AJAX发布请求出现问题

时间:2019-05-08 04:05:47

标签: ajax laravel

我有一个选择框,当每个项目都被选中时,会发送一个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)

        },
    });
});

出什么问题了?

2 个答案:

答案 0 :(得分:0)

在这种情况下,最好使用命名路由,因为您要为路由命名。

$.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)

    },
});

答案 1 :(得分:0)

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

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

,或者如果您使用的是JavaScript文件,并且只能使用/斜杠作为URL,则不能使用Blade。一切都会正常进行。发生在发布请求中。

您可以提供如下网址

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)

        },
    });