使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯

Posted

技术标签:

【中文标题】使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯【英文标题】:New route or another way to call a function from controller with ajax? Laravel 5.2 , Ajax 【发布时间】:2016-09-21 17:41:09 【问题描述】:

是否可以在不使用路由的情况下调用控制器中的函数,或者我应该使用以下两个参数创建一个新路由,以便在添加会话后重定向到特定页面?

route::get('addsesion/session-name/session slug;

如果可以使用 ajax,有人可以指点我正确的方向吗?

基本上,我想做的是从带有 ajax 的控制器调用函数 addSession($session_name, $slug) 链接 <a href/> click ,它存储我的特定会话名称和当前页面的 slug。

它应该在单击时调用此addSession 函数,存储会话数据,然后重定向到不同的 url。例如/seeparts,显示所有保存的会话数据。

我是否必须创建一个新的route route::get('addsesion/param1 - session-name/param2 - session slug', currentController@addSession );,然后将该路由用作 ajax url?或者有没有其他方法可以使用控制器的功能?

我当前的控制器:

public function showAll() 
  $parts = \DB::table() - > all();
  $data = [
    'parts' => $parts,
  ];
  return view('partlist', $data);


public function showCpu($slug) 
  // Specification query
  $specs = \DB::table() - > select($select_columns) - > where('slug', $slug) - > first();
  $data = [
    'specs' => $specs,
    'slug' => $slug
  ];
  return view('part', $data);


//Add session - call this function
public function addSession($session_name, $slug) \
  Session::put($session_name, $slug);


part.blade.php:

<html>
@include('head.blade.php')
</body>
     //on .add-to-partlist click adds session name that is specified in html and the current slug of the page
    <a class="add-to-partlist" href="/seeparts" >Add to partlist</a>

</body>
</html>

【问题讨论】:

我认为从方法返回一个 json 并且(ofc 你需要一个路由)使用 ajax 将是一个更好的解决方案(更简单),并且在成功调用 ajax 时你可以重定向到另一个页面,在错误的情况下不要重定向并显示错误,如果我是你,我会这样做 【参考方案1】:

我认为您可以在视图中使用Service Injection 绑定控制器功能。 或许你可以参考一下,https://laravel.com/docs/master/blade#service-injection。

例如:

<html>
@include('head.blade.php')
@inject('currentController', 'App\Http\Controllers\currentController')
</body>
     //on .add-to-partlist click adds session name that is specified in html and the current slug of the page
    <a class="add-to-partlist" href="/seeparts" onClick=" $currentController->addSession($session_name, $slug) ">HERE</a>

</body>
</html>

【讨论】:

我还要感谢那些编辑我的问题以便更容易理解的人。

以上是关于使用ajax从控制器调用函数的新路由或其他方式? Laravel 5.2,阿贾克斯的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.0 AJAX:使用 jsf.ajax.request(或其他方式)从 javascript 调用 bean 方法

Ajax 调用得到 200 但我没有在函数调用后插入记录

从通过 jQuery AJAX 调用的控制器返回 PDF

Ajax 调用 Laravel 路由

从函数中调用 Python cProfile。 (或其他在 Django 中使用 cProfile 的方式)

确保控制器方法实际上是由 ajax 或 mvc 中的 POST 请求调用的