如何在 laravel js 文件中添加 ajax URL?

Posted

技术标签:

【中文标题】如何在 laravel js 文件中添加 ajax URL?【英文标题】:How do I add ajax URL on a laravel js file? 【发布时间】: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文件 【参考方案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"

【讨论】:

以上是关于如何在 laravel js 文件中添加 ajax URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中添加 WP API 和 JS 特色图片附件

如何从 js 文件调用 Laravel 路由

如何与 js 文件 laravel 共享变量?

API:Laravel 中的 Ajax 帖子 - 403(禁止)

如何使用 Ajax 在 Laravel 中添加/包含视图

如何在 laravel 5.3 中使用 ajax