我正在尝试根据“部门”填充“位置”下拉列表。在“部门”下拉列表的change
事件中触发Ajax调用。
问题是Ajax调用无法到达正确的路径:
url: 'ajax/get-position'
- 网址为:localhost / public / join / ajax / get-position?dept_id = 5 url: '/ajax/get-position'
- url是: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
- 则不然。疯狂的世界。
答案 0 :(得分:2)
我不完全确定,但根据我们关于项目详情的对话,我认为问题与文档根目录的位置有关。 public
目录永远不会出现在任何laravel项目的网址中。
我创建了一个演示项目来演示与Laravel and Ajax的简单交互。这是一个vanilla laravel项目,对hello
视图略有改动。
签出项目,导航到公共文件夹,然后使用以下命令启动ad-hoc phpserver:
php -S localhost:8002
然后,您可以转到网址http://localhost:8002
以访问主页。
如果您检查主页上的链接,并查看使用路由URL
的{{1}}外观生成的网址。该URL不包含tester
目录:
public
您还可以查看ajax设置,并看到您也可以使用http://localhost:8003/tester
路由。
tester
使用按钮点击链接或ajax调用将点击路径文件中的 $('#getbutton').click( function (){
$.ajax({
url: 'tester'
}).complete(function (a){
alert(a.responseText);
}).error(function (a){
console.log(a);
});
});
路径:
tester
链接可以通过路由文件中分配的路由名Route::get('tester',[ 'as' => 'tester', 'uses' => function (){
return 'worked';
}]);
来命中路由,并且ajax请求可以从查询字符串中命中路由。
您项目中的路线看起来不错,并且使用tester
作为您在ajax调用中的网址应该不是问题。
试试这个项目。即使问题不是网络问题,希望它能帮助您找出问题的来源。