如何在 .click() 上使用 AJAX 将 id 从视图传递到控制器
Posted
技术标签:
【中文标题】如何在 .click() 上使用 AJAX 将 id 从视图传递到控制器【英文标题】:how to pass id from view to controller using AJAX on .click() 【发布时间】:2017-03-23 02:31:52 【问题描述】:我正在开发 Laravel 5.2,我想在用户点击添加到购物车按钮时发送book_id
,但我无法这样做。
<button id="cart" class="btnbuy btn-hvr-ripple-out">ADD TO CART</button>
Ajax 函数
$(document).ready(function()
$("#cart").click(function()
$.ajax(
type:'get',
url: "/addcart/id",
contentType:'application/json',
data: id :"$value->book_id",
success: function(data)
alert(data.msg);
);
);
);
Routes.php
/*cart*/
Route::get('/addcart','AjaxOperationController@addcart');
控制器
public function addcart(Request $request)
$id=request->id;
if ($request->session()->has('userId'))
$user_id=$request->session()->get('userId');
$add_to_cart=DB::insert('insert into cart_master (user_id, book_id) values(?,?)',[$user_id,$id]);
return response()->json('msg'=>'Product has been added to cart! :)');
else
return response()->json('msg'=>'Please Login first to access cart! :)');
【问题讨论】:
我认为您将额外的参数传递给 url 并将数据发送到函数/addcart/id
。此外,您必须按如下方式编写 data: id :"$value->book_id"
=> 无需添加额外的引号。
额外参数??
/addcart/id
=> 这意味着您将一些查询字符串传递给函数(获取参数)
嘿摆脱了错误但警报没有显示.. :(
检查控制台,你真的得到了成功响应或错误。
【参考方案1】:
我认为"$value->book_id"
来自 php。
您需要按如下方式更改代码:
Ajax 调用:
$(document).ready(function()
$("#cart").click(function()
$.ajax(
type:'get',
url: "addcart/",
contentType:'application/json',
data: id :"$value->book_id",
success: function(data)
alert(data.msg);
);
);
);
路线:
Route::get('addcart','AjaxOperationController@addcart');
使用:
use Illuminate\Http\Request;
控制器:
public function addcart(Request $request)
$id=request->input("id");
if ($request->session()->has('userId'))
$user_id=$request->session()->get('userId');
$add_to_cart=DB::insert('insert into cart_master (user_id, book_id) values(?,?)',[$user_id,$id]);
return response()->json('msg'=>'Product has been added to cart! :)');
else
return response()->json('msg'=>'Please Login first to access cart! :)');
【讨论】:
仍然没有 :'( 我不知道为什么我会收到 500 错误 MethodNotAllowedHere 异常 :( @BhavikBamania :检查你的路线。你是否遵循 Laravel 的所有命名约定?我完成了一个 ajax 演示,然后上传了这个答案。 我猜如果它运行良好的话它会与我的其他 ajax 函数混淆,那么我想我应该为这个函数使用其他控制器?? @BhavikBamania:做一件事。在您的控制器中编写另一个演示函数,并使用 get 方法从您的 ajax 调用它,返回 json 响应并尝试提醒它。如果你成功了,那么只需将代码复制粘贴到该函数中。 未定义的变量:值(查看:C:\xampp\htdocs\bookbucket\laravel\resources\views\bookdetail.blade.php)得到这个错误:(它提到 $value 作为未定义我'已经检查了结束语句,它们都很好,但仍然是这样..【参考方案2】:您将数据数组作为字符串而不是 javascript 对象发送。
data:'"id":"$value->book_id"',
改为将其作为对象发送:
data:
id : "$value->book_id"
【讨论】:
您需要从代码id : "$value->book_id"
中删除多余的花括号
不工作的兄弟得到了这里不允许的方法异常:(
@BhavikBamania,你有没有像 kishor 说的那样去掉多余的花括号?
我认为url: "/addcart/id",
id 之前缺少左花括号
不,它给出假定的常量 id 错误,这是我的错误,所以我在新编辑中删除了它以上是关于如何在 .click() 上使用 AJAX 将 id 从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章
如何将ajax请求返回的Json格式数据循环输出成table形式