【问题标题】:How do I add ajax URL on a laravel js file?如何在 laravel js 文件中添加 ajax URL?
【发布时间】:2014-04-20 06:08:19
【问题描述】:

我正在为我在 Laravel 中构建的网站构建商店定位器。由于刀片文件调用 js 文件,因此它位于assets 文件夹中。它无法识别这样的 URL

$.ajax({
    url: '{{ URL::action('getLocation') }}',
    // ...
});

这就是我的 route.php 的方式

Route::post('/getLocation', array('as'=>'getLocation','uses'=>'FrontController@getLocation'));

所以它没有找到文件。如何在 ajax URL 中调用此函数?

【问题讨论】:

  • 在 JS 中实际打印出什么?即什么是{{ URL::action('getLocation') }}
  • @ExplosionPills 从用户那里获取当前的纬度和经度
  • 这是php 文件还是js 文件(您在其中使用了$.ajax)?
  • 包含$.ajax请求的文件是.blade.php文件吗?
  • 刀片文件调用js文件

标签: ajax laravel laravel-4


【解决方案1】:

您似乎使用了错误的方法来生成 URL。 尝试从URL::action() 切换到URL::route()

URL::action() 用于生成给定控制器操作的 URL,但是您需要像这样编写它:

URL::action('FrontController@getLocation')

URL::route() 使用 "as" => "routeName" 生成路由定义中命名的路由的 url。在你的情况下:

URL::route('getLocation')

希望这会有所帮助!

【讨论】:

  • 谢谢!但问题是,由于 js 不在刀片文件中,我无法使用刀片功能
  • 哦,好的。现在我懂了。我通常设置我的 JS,以便我可以将一些设置传递给给定的功能。在这种情况下,我会将该 ajax 调用包装在一个 JS 函数中,例如var getLocation = function(settings){} 然后从我的 (Blade) 视图中我会使用所需的参数调用该函数: (对不起,坐在酒店酒吧,代码未经测试,希望你明白了:))
【解决方案2】:

你可以试试这个:

// Add this in your filtes.php file (feel free to store where you like)
View::composer('layouts.master', function($view) {
    $ajaxUrl = json_encode(array('url' => URL::action('getLocation')));
    $view->with('ajax', $ajaxUrl);
});

将此添加到您的 master.blade.php 文件的 (master layout) <head></head> 部分(将其放在您的 js 文件之前):

<script>var ajax = {{ $ajax or 'undefined' }}</script>

现在您可以将其用作:

// ajax.url
console.log(ajax.url);

阅读这里,similar thing.

【讨论】:

  • 您是否在js 文件中的head 之前写了&lt;script&gt;var ajax = {{ $ajax or 'undefined' }}&lt;/script&gt;,也许您应该将它放在&lt;head&gt; 内的顶部。它可以工作并经过测试。
【解决方案3】:

如果您从 .js 文件调用 ajax 函数,
尝试将刀片部分 '{{ URL::action('getLocation') }}' 更改为 '/getLocation'
或传递一个完整的网址,例如:'http://domain.com/getLocation',它应该可以工作。

【讨论】:

    【解决方案4】:

    你可以使用这个package,它提供了几乎所有可以在js文件中使用的laravel帮助函数。

    【讨论】:

      【解决方案5】:

      这是我如何实现这一目标的演示

      我可能会迟到。这只是一个示例代码,以帮助了解人们 谁访问了这个问题。希望这对访问这里的人有所帮助。

      在我的 routes.php 我定义了一个命名路由

      Route::post('getLocation',array(
          'as'=>'getLocation','uses'=>'FrontController@getLocation')
      );
      

      在我的 somehtmlform.blade.php 文件中将名称路由添加为 data-url

      {!! Form::open() !!}
      {!! Form::text('input-name',null,array('class'=>'form-control search-input','data-url'=> URL::route("getLocation") ))
      {!! Form::close() !!}
      

      我的 search.js 文件捕获 data-url 并将其用作发布 url

      $('.search-input').each(function(){
        $(this).on('change',function (e) {
            search(this)
        });
      });
      
      function search(self) {
          var query = $(self).val();
          $.ajax({
              url: $(self).attr('data-url'),
              type: 'post',
              data: {'q':query, '_token': $('input[name=_token]').val()},
              success: function(data){
                console.log(data);        
              },
              error: function(data){
                  // Not found
              }
          });
      }
      

      【讨论】:

        【解决方案6】:

        在 js 文件中,不能不使用 Url::action 进行路由 做吧

        url:"/getLocation"

        【讨论】:

          猜你喜欢
          • 2019-03-27
          • 2021-11-21
          • 2017-02-08
          • 1970-01-01
          • 2012-12-12
          • 1970-01-01
          • 2020-10-18
          • 2019-05-16
          相关资源
          最近更新 更多