【问题标题】:Can't get data in laravel controller that sent from ajax无法在 laravel 控制器中获取从 ajax 发送的数据
【发布时间】:2020-09-24 09:36:37
【问题描述】:

我有一条路线,

Route::post('/shop', 'ShopController@index');
Route::resource('/shop', 'ShopController')->parameters(['shop' => 'slug']);

我想通过价格范围过滤产品。

这是我的:

filter_data();
        var sliderrange = $('#slider-range');
        var amountprice = $('#amount');
        function filter_data() {
            var  min_price = $("#min_price").val();
            var  max_price = $("#max_price").val();
            console.log(min_price);
            $.ajax({ url:"/shop", method:"GET",
                data:{ min_price:min_price, max_price:max_price,},
                success:function (data) { },
            });
        };

这是控制器:

    public function index(Request $request)
{
    $min = $request->input('min_price');
    $max = $request->input('max_price');

    return view('front.pages.shop', ['products' => Product::where('status', 1)->whereBetween('price', ['min', 'max'])->latest()->paginate(15)]);
}

【问题讨论】:

  • 你能把问题说得更具体一点吗?控制器实际上做了什么?
  • 请查看我更新的片段
  • 到底是什么问题?获取请求是否有效? laravel 是否返回不正确的数据?请澄清问题。

标签: javascript php ajax laravel eloquent


【解决方案1】:

您在浏览器中收到的错误消息到底是什么?

如果问题与 CORS 有关,并且您使用的是 Laravel 7,您应该更新 config/cors.php 文件,以便它适用于您的项目。 (例如设置'allowed_origins' => ['*'])。

详情请见documentation

【讨论】:

  • 没有错误显示准确但也没有产品显示。如果我用 $data = $request->all(); 替换控制器中的所有代码;打印_r($数据);这是一个空数组()
  • 我明白了。另一个问题可能是您定义路线的顺序。 Route::resource() 会生成大量额外的路由,并且可能会覆盖您的独立 Route::post('/shop', 'ShopController@index');。此外,我有点困惑,哪条路线应该做什么。您有一个使用 index-方法的 POST 路由“/shop”,但您使用 AJAX 调用 /shop URL,使用 GET 而不是 POST。
  • may config 文件夹中没有名为 cors.php 的文件,我使用的是 laravel 6.18
  • 好的,我正在使用 URL POST 更新我的 ajax 代码,但结果相同,没有改变 happed @stefanzweifel
  • @AbuBasedJibon 您没有发布到 ajax,您想获取数据。只需重写路线
【解决方案2】:

显然问题在于控制器没有返回正确的数据(据我所知。)

调试此类问题的第一步是检查您用于查询的参数是否实际填充。

这可以这样完成: dd($min, $max)

如果 dd 函数的输出显示空值,则问题出在 ajax 请求中。 如果它们已设置,您需要执行以下操作:

public function index(Request $request)
{
    $min = $request->input('min_price');
    $max = $request->input('max_price');

    $products = Product::where('status', 1)->whereBetween('price', ['min', 'max'])->latest()->paginate(15);
    dd($products);

    return view('front.pages.shop', ['products' => $products]);
}

将您的产品放入一个变量中并使用该变量运行 dd() 函数以查看您是否有数据。完成调试后删除 dd() 函数。

如果您有数据,问题可能出在其他地方。

注意: 如果你想获取数据,你实际上应该使用 GET 方法而不是使用 POST 方法。

例子:

Route::get('/shop', 'ShopController@index');

我希望这是朝着正确方向的一点推动,尝试逐步调试以找到可能存在问题的确切点。

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 2017-03-11
    • 2017-06-23
    • 1970-01-01
    相关资源
    最近更新 更多