为什么我的ajax请求从Laravel控制器重复相同的数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我的ajax请求从Laravel控制器重复相同的数据?相关的知识,希望对你有一定的参考价值。

目标:当用户单击“加载更多”按钮时,使用ajax请求将更多行从数据库加载到视图。我希望在不重新加载页面的情况下加载数据。

问题:通过ajax加载的数据会在每个请求上重复相同的行,并且不会按照标准请求进行分页。

Detail:我有一个视图,该视图从数据库中加载4行,并使用内置Laravel's进行分页。我在“加载更多”按钮上添加了一个事件侦听器,该按钮将请求成功发送到pagination,后者又成功返回了数据。 controller返回我要显示的数据的局部视图。但是,此数据似乎不能正确增加,并且会不断重复每个请求上显示的记录。如果问题出在controllercontroller中,我不确定在这里缺少什么?

[我对JSLaravelphp并不十分有经验,因为他来自更多的Web设计师和JS设计背景,并且很想真正了解我在这里做错了什么。

部分视图:

UI

使用Javascript:(我正在更新button href属性,以便请求URL反映正确的查询)

@foreach ($products as $product)
    <div style="background-color:pink; width: 200px;">
        <p>{{ $product->title }}</p>
        <img src="/images/product/{{ $product->img }}" alt="{{ $product->title }}" style="width: 50px;">
    </div>
@endforeach

控制器:

const container = document.querySelector('#sandbox-container');
let button = document.getElementById('load-stuff');
let url = button.getAttribute('href'); // http://127.0.0.1:8000/sandbox?page=2
let pageNum = button.getAttribute('href').substr(35,1);

button.addEventListener('click', (event) => {
    event.preventDefault();
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

    // if page loads successfully, replace the number at the end of the query string with the incremented page number
    pageNum++;
    newUrl = url.replace(/page=([^d]*)/, `page=${pageNum}`);
    button.setAttribute('href', newUrl);

    xhr.onload = function() {
        if (xhr.status === 200) {  
            container.insertAdjacenthtml('beforeend', xhr.responseText);
        }
        else {
            console.log(`Request failed, this is the response: ${xhr.responseText}`);
        }
    };     
    xhr.send();     
})
答案

每次请求获取正确数据时,都应重新生成分页。 public function sandbox(Request $request) { $products = Product::orderBy('title', 'asc')->paginate(4); if($request->expectsJson()){ return view('sandbox-more', compact('products')); } else { return view('sandbox', compact('products')); } } 是通过Here执行此操作的一个很好的示例。由于您使用的是纯jQuery,因此应根据您的需要进行调整。

以上是关于为什么我的ajax请求从Laravel控制器重复相同的数据?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 将 VerifyCsrfToken 添加到控制器获取 ajax 请求

Laravel:为啥我的 ajax 请求返回“500(内部服务器错误)”?

通过 AJAX 将数据传递给 Laravel 控制器

laravel 8 没有从 ajax 请求中获取数据

当我在我的 Web 应用程序中发送 Ajax 请求时,控制器端会在 laravel 的请求参数中为我提供脚本

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图