Laravel 与 Ajax:不正确的路由
Posted
技术标签:
【中文标题】Laravel 与 Ajax:不正确的路由【英文标题】:Laravel vs. Ajax: incorrect routing 【发布时间】:2015-02-25 05:30:15 【问题描述】:我正在尝试根据“部门”填充“职位”下拉列表。 Ajax 调用在“部门”下拉列表的change
事件上触发。
问题是Ajax调用无法到达正确的路由:
url: 'ajax/get-position'
- 网址是:localhost/public/join/ajax/get-position?dept_id=5
url: '/ajax/get-position'
- 网址是:localhost/ajax/get-position?dept_id=5
这两个网址都是错误的,我不知道为什么。尤其是第一点中的 /join/ 对我来说是个谜。正确的 URL 应该是 localhost/public/ajax/get-position?dept_id=5。我相信路由中存在某种冲突,但我不确定在哪里。
Ajax 调用是在 localhost/public/join/editor 页面上进行的。
JS:
...
...
$.ajax(
url: 'ajax/get-position',
data:
dept_id: value
,
type: 'GET',
dataType : 'json',
success: function(json)
//
,
error: function(xhr, status, errorThrown)
//
);
...
...
路线:
Route::get('join/editor',
array(
'uses' => 'DefaultController@showEditorRegistration',
'as' => 'editorRegistration'
)
);
Route::post('join/editor',
array(
'uses' => 'DefaultController@createEditor',
'as' => 'createEditor'
)
);
// ROUTE FOR AJAX CALL
Route::get('ajax/get-position',
array(
'uses' => 'DefaultController@getPositionsByDepartment',
)
);
有什么想法吗?
编辑:
javascript 位于外部文件中。如果我将 JS 直接放在 Blade.php 视图中并使用 URL::route('routename')
作为 Ajax url
值 - 一切正常。但是,仅使用 url: ajax/get-position
- 不会。疯狂的世界。
【问题讨论】:
如果您尝试直接在浏览器中点击get-position
路由会收到什么错误消息?
@ChrisSchmitz 没有。直接在浏览器中访问时,该路线很好。只有 Ajax 调用会产生问题。我在帖子中提到的错误 URL 会抛出 404。
我设置了一个快速项目来测试 ajax 调用并且没有遇到问题。要进行故障排除,请尝试将 ajax/get-position
路由中的第二个参数替换为闭包并返回测试数据。例如:Route::get('ajax/get-position', function()return 'worked';);
。如果你添加它并通过 ajax 触发它,你会得到“工作”返回吗?
@ChrisSchmitz 不幸的是,它没有被退回。它无法返回,因为 Ajax 仍然没有找到正确的路线。我将 JS 脚本放入一个 Blade.php 文件中,并使用 URL::route('getPositionsByDepartment')
作为 Ajax url
值 - 它可以工作。但是我想将 JS 保存在一个外部文件中并简单地使用 'ajax/get-position',它应该基于路由工作 - 它不:/
这很奇怪。因此,当您将 URL::route('getPositionsByDepartment')
添加到视图中并在浏览器的开发工具中检查生成的 ajax 时,它插入的完整 url 是什么?
【参考方案1】:
我不完全确定,但根据我们关于您项目细节的对话,我认为问题与您的文档根目录的位置有关。 public
目录不应该出现在你的任何 laravel 项目的 url 中。
我创建了一个演示项目来演示与Laravel and Ajax 的简单交互。这是一个原版的 laravel 项目,对 hello
视图做了些许改动。
签出项目,导航到公共文件夹,然后使用以下命令启动临时 phpserver:
php -S localhost:8002
然后您可以转到网址http://localhost:8002
以访问主页。
如果您检查主页上的链接并查看使用URL
外观为路由tester
生成的url。该 URL 不包含 public
目录:
http://localhost:8003/tester
您还可以查看 ajax 设置,发现您也可以使用 tester
路由。
$('#getbutton').click( function ()
$.ajax(
url: 'tester'
).complete(function (a)
alert(a.responseText);
).error(function (a)
console.log(a);
);
);
使用链接或 ajax 调用按钮单击将点击路由文件中的 tester
路由:
Route::get('tester',[ 'as' => 'tester', 'uses' => function ()
return 'worked';
]);
链接可以通过路由文件中分配的路由名称tester
命中路由,ajax请求可以从查询字符串中命中路由。
您项目中的路由看起来不错,并且在 ajax 调用中使用 ajax/get-position
作为您的 url 应该不是问题。
试试这个项目。即使问题不是 webroot 问题,也希望它能帮助您找出问题的根源。
【讨论】:
谢谢,克里斯,这很有用。我也不确定,但似乎根位置是唯一可能不正确的地方。很快我将在生产环境中进行测试,我们拭目以待。在那之前,我将路由 URL 保存在隐藏的表单输入中,然后从那里将其检索到我的 JS 中。再次感谢。 没问题。祝你好运!以上是关于Laravel 与 Ajax:不正确的路由的主要内容,如果未能解决你的问题,请参考以下文章