在路由到仅处理 AJAX 请求和返回响应(浏览器中未显示视图)的控制器操作中,URL 参数有什么用?



我正在学习Laravel v6。我有一个视图,比如说addpainting.blade.php,我们让用户将新画作的详细信息输入数据库。用户输入绘画标题后,POSTAJAX请求(来自该视图中的 JQuery 脚本(将转到操作BookController@checkIfRecordExists(),如果该绘画的记录已存在于数据库中,则返回true,在这种情况下,我们将用户重定向到另一个视图,在那里他可以编辑数据库中已存在的记录。

同样,在同一视图中,有一个按钮将另一个Jquery AJAX POST请求发送到另一个控制器操作,以在服务器上执行其他操作。

然后是同一页面上的另一个按钮,该按钮将另一个JQuery AJAX POST请求发送到服务器,以执行另一个控制器操作以执行另一个任务。

问题:

routes/web.php,直觉上思考,我不应该在我的路由中指定 URL,因为这个 URL 不是网页的 URL,永远不会在浏览器中打开。路由中唯一被使用的部分(在我的理解中(是Route::method(URL, Action)->name()函数的第二个参数,也是我们给路由命名的名称,因为我们将在{{ route('nameOfRoute') }}中使用它来表示 JQuery 中$.ajax()请求的url参数的值。

Route::post('Supposed/URL???', AJAXController@actionName)->name("nameOfRoute");
  1. 是否真的有必要为 AJAX 请求指定路由?还是仅针对视图的路由,即每个视图的路由显示在浏览器中?

  2. 如果有多个 POST AJAX 请求转到同一控制器的不同方法/操作,那么我是否应该为所有这些路由提供相同的 URL?例如Route::post('cat/star', AJAXController@actionName)->name("nameOfRoute");Route::post('cat/star', AJAXController@anotherActionName)->name("anotherNameOfRoute");Route::post('cat/star', AJAXController@yetAnotherActionName)->name("yetAnotherNameOfRoute");

  3. 我怎么知道要为这种路由的 URL 提供什么名称/字符串?例如,当我为用户将在浏览器中看到的页面编写 URL 时,我将编写一个描述性 URL,我希望用户在他/她的地址栏中看到该 URL。例如Route::get('paintings/dashboard', PaintingsController@displayPaintingsDashboard)->name('paintings.dashboard').但是,将此特定 URL 用于处理 ajax 请求并返回响应的控制器操作的路由有什么用?

你提到AJAX参与其中,否则你确实可以没有URL,尽管它可能会变得丑陋。但是,AJAX 需要一个 URL 才能工作,因为 URL 是一个标准化的 Web 地址。这可以追溯到我们今天使用的WWW的创建,学习历史很有趣,但并不是真正的重点。

因此,具体来说,要回答您的问题:

  1. 是的,绝对有必要有一个用于 AJAX 请求的 URL。
  2. 我的意思是,你可以这样做,但我不明白这一点。为同一地址定义不同的路由只会导致调用最后一个定义的路由。
  3. 取决于应用程序。通常,Web 应用要么呈现视图(HTML 格式(,要么返回 API 响应(JSON/XML/SOAP/what have you(,或者两者兼而有之或无。分离路线的要点是关注点分离。从技术上讲,你可以有一个单一的路由来完成所有事情,但这会破坏像Laravel这样的框架的目的。理想情况下,您希望控制器操作简短易读,并将内容分开,以帮助处理持续的需求和业务逻辑更改。所以,最重要的是,你要给你的行为起有意义的名字,这是最重要的。随着应用程序的增长/更改,命名可能会更改,但请尽量描述操作正在完成的内容。

如果我能提供更多意见,请告诉我,我会提供帮助。

相关内容

最新更新