Laravel vs. Ajax:错误的路由

时间:2014-12-29 00:08:14

标签: ajax laravel laravel-4 routing

我正在尝试根据“部门”填充“位置”下拉列表。在“部门”下拉列表的change事件中触发Ajax调用。

问题是Ajax调用无法到达正确的路径:

  • with url: 'ajax/get-position' - 网址为:localhost / public / join / ajax / get-position?dept_id = 5
  • with 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 - 则不然。疯狂的世界。

1 个答案:

答案 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调用中的网址应该不是问题。

试试这个项目。即使问题不是网络问题,希望它能帮助您找出问题的来源。