【问题标题】:error 404 while using {{url()}} on laravel ajax在 laravel ajax 上使用 {{url()}} 时出现错误 404
【发布时间】:2021-02-15 09:19:24
【问题描述】:

太棒了, 在 laravel 上使用 ajax 时出现一些错误,控制台返回 404, 那是我的ajax

$('#btn_search_postcode').click(function(e){
        let postcode = $('#postcode').val();
        if(postcode != ""){
            $.ajax({
                method: "GET",
                url: "{{route('company.postcode')}}",
                dataType: "JSON",
                data:{
                    'id':postcode
                },
                success: function(result){
                    if(result != ""){
                        console.log(result.prefectureid);
                    }
                    else{
                        console.log('null');
                    }
                }
            })
        }
    })

我已将 url 更改为 "{{url('company/postcode')}}/"+postcode 但仍然错误 这是我的路线

Route::GET('/company/postcode/{id}', 'mycontroller\companyController@getPostCode')->name('company.postcode');

但是当我将网址更改为时代码工作正常

url: "http://localhost/mylaravel/public/company/postcode/"+postcode,

我不能使用最后一种方法,因为在其他电脑上使用不同的端口。

有人可以帮我解决这个问题吗? 注意:我可以看到 csrf 令牌,当我在 ajax 中再次添加 csrf 令牌时,我在错误链接上看到 2 个令牌

编辑: 我仍然没有解决这个问题,但现在我使用url:rootUrl+"/companies/postcode/"+postcode, 来解决这个问题,这样可以吗?

【问题讨论】:

    标签: ajax laravel routes


    【解决方案1】:

    如果我理解您的问题,您有一条名为 company.postcode 的路线,对吗?如果您确实有这条路线,而现在您想要通过邮政编码获得公司,那么您将需要利用 Laravel 的路线模型绑定。你可以做的是进入你的模型并创建一个这样的函数:

    public function getRouteKeyName()
    {
        return 'postcode';
    }
    

    但是,我看到了一个问题,可能会导致您在路上遇到一些问题。当您有多家公司使用相同的邮政编码时会发生什么? Laravel 如何知道你想要哪一个? 一个更好的选择是使用 id 字段并用它检索您的公司。除非您将数据库中的邮政编码字段设为唯一字段。这再次提出了一个问题,即当您有两家或更多公司想要访问您的网站且共享相同的邮政编码时会发生什么?

    【讨论】:

    • “当您有多个公司使用相同的邮政编码时会发生什么?” 不,我不是从邮政编码中选择公司,该代码是从邮政编码填充其他字段。我在公司使用路由,因为我不再制作其他控制器。如果你看到了,问题出在 ajax 的 url,我在浏览器中使用 localhost 测试 url 并且可以返回数据,如果我使用 localhost url 也可以返回数据,在 ajax 中。
    【解决方案2】:

    你必须像这样改变它

    url: "{{url('company/postcode')}}"+'/'+postcode
    

    请尝试这些并告诉我发生了什么

    【讨论】:

    • 谢谢你的回答,我试过了,但结果还是一样
    【解决方案3】:

    问题是你的路由有一个必需的参数{id},由于你在渲染路由的url时没有提供它,所以laravel找不到路由。 两种解决方案:

    • 在你的路由声明中使 id 参数成为可选参数,就像Route::GET('/company/postcode/{id?}', 'mycontroller\companyController@getPostCode')->name('company.postcode');(注意{id?}
    • 通过 php 提供参数,并在视图中定义一些变量,例如:{{route('company.postcode',$id)}}

    真诚的

    【讨论】:

    • 我使用 +postcode 到 Id,并尝试使用变量 id。在上面我写了数据:{ id: postcode},但在我的原始代码中,我使用的是"{{url('companies/postcode')}}/"+id,,但有同样的错误
    • 这行不通,因为路由是使用 php 而不是 js 呈现的。当您执行 {{url('companies/postcode')}} 时,您首先在 php 中渲染路线,而 laravel 并没有像我解释的那样找到它。如果你想用一些 js id 连接你的 php 路由,让你的参数是可选的,如解释{id?}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多