如何在 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
之前写了<script>var ajax = $ajax or 'undefined' </script>
,也许您应该将它放在<head>
内的顶部。它可以工作并经过测试。【参考方案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 特色图片附件