如何在 .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-&gt;book_id" => 无需添加额外的引号。 额外参数?? /addcart/id => 这意味着您将一些查询字符串传递给函数(获取参数) 嘿摆脱了错误但警报没有显示.. :( 检查控制台,你真的得到了成功响应或错误。 【参考方案1】:

我认为"$value-&gt;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-&gt;book_id"中删除多余的花括号 不工作的兄弟得到了这里不允许的方法异常:( @BhavikBamania,你有没有像 kishor 说的那样去掉多余的花括号? 我认为url: "/addcart/id", id 之前缺少左花括号 不,它给出假定的常量 id 错误,这是我的错误,所以我在新编辑中删除了它

以上是关于如何在 .click() 上使用 AJAX 将 id 从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 到 servlet

Ajax 到 servlet

如何将ajax请求返回的Json格式数据循环输出成table形式

在前台将AJAX回调函数里面的数组用Jquery进行分页并写在相对应的DIV中

如何使用 Ajax 将图像发送到 PHP 文件?

如何在ajax文件上传中显示进度条