【问题标题】:Laravel and AJAX getLaravel 和 AJAX 获取
【发布时间】:2018-02-17 13:42:39
【问题描述】:

我想在我的 laravel 项目中使用 ajax 方法,我已经为它定义了一个路由:

Route::get('/ajax/get_discount_code','SomeController@some_method');

所以我使用的是 jQuery 的 get 函数:

$('#button').click(function () {
    var url = '/ajax/get_discount_code';
    $.get( url , function( data ) {
      console.log(data);
    });
 });

我收到以下错误:

GET http://localhost/ajax/validate_discount_code 404(未找到)

原因是,它试图获取http://localhost/ajax/validate_discount_code 而不是http://localhost/myProject/public/ajax/validate_discount_code

为了修复这个错误,我可以更改 javascript url 变量并将其设置为:

var url = '/myProject/public/ajax/validate_discount_code';

然后 404(未找到)错误将不再出现,它工作得很好,但我知道这不是修复此错误的好方法,因为我已将“myProject/public”硬编码到字符串中。
我的问题是,在此示例中修复 404 Not Found 错误的最佳做法是什么?

【问题讨论】:

  • 你可以看到这个帖子:stackoverflow.com/questions/30938077/…
  • 显示你如何在你的 routes.php 中定义它
  • Laroute 库也可能有助于使用 Javascript 获取路由的 URL
  • @Michel Route::get('/ajax/get_discount_code','SomeController@some_method');

标签: jquery ajax laravel


【解决方案1】:

如果您安装了 Laroute 辅助函数,您可以在 Javascript 中轻松包含指向路由的 URL:

$('#button').click(function () {
    var url = laroute.url('/ajax/get_discount_code'); // laroute.action('SomeController@some_method'); will also work
    $.get( url , function( data ) {
        console.log(data);
    });
});

【讨论】:

    【解决方案2】:

    使用 laravel url() 函数制作完整的 url 像

    var url = "{{ url('/ajax/get_discount_code') }}";
    

    【讨论】:

    • 我在一个 javascript 文件中。我不能使用 laravel 的模板引擎
    • 你有一个外部的 js 文件,你没有将 js 代码写入你的刀片文件?
    【解决方案3】:

    您需要设置一个虚拟主机来解决这个问题。

    它给出 404 错误的原因是因为 localhost 没有指向 Laravel 安装,所以你不能引用根 URL。

    假设您使用的是 apache,您需要执行以下操作来设置 vHost:

    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName my-project.local
        DocumentRoot {localhost_dir}/myProject/public
        <Directory {localhost_dir}/myProject/public>
            Options Indexes FollowSymLinks
            Allowoverride All
            Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/zjx_error.log
        CustomLog ${APACHE_LOG_DIR}/zjx_access.log combined
    </VirtualHost>
    

    您将能够将您的 AJAX 指向您想要的路线。请记住在您的 hosts 文件中添加一行以指向 locahost。

    【讨论】:

      【解决方案4】:

      您可以在主刀片文件的头部添加一个全局变量,您可以在其中存储 baseURL 的值,例如:

      <head>
      ...
        <script type="text/javascript">
            var base_url = '{!! url('/') !!}';
        </script>
        //the rest of ur scripts
      </head>
      

      并且在您的脚本中,您可以调用变量base_url 并将其与请求的url 粘合在一起,这样您就不必担心它,而且您可以通过更改base_url 来更改该变量的值和整个站点都可以正常工作。

      【讨论】:

      • Illuminate\Routing\UrlGenerator 类的对象无法转换为字符串
      • @AliSeyfi add '/' inside url(),查看答案
      猜你喜欢
      • 2020-07-05
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-19
      • 1970-01-01
      • 2020-02-05
      • 2019-02-08
      相关资源
      最近更新 更多