php - Laravel Ajax 分页:无请求
问题描述
我的 ajax 分页链接到过滤器时遇到了一些困难。这是它应该如何工作的。用户可以通过特定页面访问表单。单击提交按钮时,在JS中发出原始sql请求并实现POST ajax请求以在页面底部使用分页菜单获取结果。这部分有效。但是我对分页菜单有一些问题,因为链接不起作用。例如,通过单击“第 2 页”链接,没有任何反应。
以下是我的代码的不同部分:
路线
Route::get('articles/filter', 'ArticleController@filterx');
Route::post('articles/request/ajax/articles/filter', 'ArticleController@filtery');
Route::get('articles/request/ajax/articles/filter', 'ArticleController@filtery');
控制器
文章控制器
public function filterx() { // get filter page
return view('filter');
}
public function filtery(Request $request) { // filter ajax function
$articles = Article::paginate(2);
if($request->ajax()) {
// partial view returned in html
return $html = view('filterResults', compact('articles'));
}
}
意见
过滤器.blade.php
@extends('layouts/app')
@section('title')
Title
@endsection
@section('content')
<div class="container">
<!-- filter -->
<h2>Filter</h2>
<div class="content-card content">
<form method="POST" action="">
<!-- form code... -->
</form>
</div>
<div id="filter-results">
</div>
</div>
@endsection
filterResults.blade.php
@foreach($articles as $article)
<p>{{ $article->name }}</p>
@endforeach
{{ $articles->links() }}
Javascript
$("#submit-button").click(function(e) {
e.preventDefault();
// ajax request (raw mysql request)
var requestQuery = ...; // (quite long) raw request
console.log(requestQuery); // console verification of request
$.ajax({
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
url: '../articles/request/ajax/articles/filter',
type: 'POST',
data: {
request: requestQuery
},
success: function(html) {
$("#filter-results").empty().html(html);
}
});
});
$(window).on('hashchange', function() {
// if hash in url
if (window.location.hash) {
// page contains hash value
var page = window.location.hash.replace('#', '');
if (page == Number.NaN || page <= 0) {
return false;
}
// if ok ->getData returned
else {
getData(page);
}
}
});
$(document).on('click', '.pagination a', function(e) {
e.preventDefault();
$('.pagination li').removeClass('active');
$(this).parent('li').addClass('active');
var url = $(this).attr('href');
var page = $(this).attr('href').split('page=')[1];
getData(page,url);
});
function getData(page,url) {
$.ajax(
{
url: url,
type: 'get',
datatype: 'html',
done: function(data) {
console.log('ok');
$('#filter-results').empty().html(data);
location.hash = page;
},
fail: function(jqXHR, ajaxOptions, thrownError) {
console.log('No response from server');
}
});
}
我不明白为什么它不起作用,我想我误解了一些东西。
谢谢,祝你有美好的一天
解决方案
Route::get('articles/filter/{page}', 'ArticleController@filter');
public function filter(Request $request, int $page) {
$articles = Article::paginate($page);
}
就是这样
推荐阅读
- amazon-web-services - 在 AWS 上托管的 kubernetes 集群中的 KOPS 部署的主节点上连接被拒绝
- c++ - 用于 Fortran 代码预处理的 CPP -D 选项
- android - 如何使用 Cordova 在 Android 上实现打印?
- python - 如何在不使用 raw_input 或 Ctrl-C 的情况下中断无限循环?蟒蛇 2.7
- ruby-on-rails - 使用 factorygirls 模型 embeds_many 和 embedded_in 关系
- http - 在 Go 中解码 http2 帧头/数据
- ssl - 如何使用 SAP Fiori Client 访问 SAP Fiori Launchpad(内部 URL)
- javascript - 创建了一个不起作用的删除功能
- ios - 如何确定当前的 iPhone/设备型号?在编写单元测试用例时
- python - 使用python 3将Json嵌套到csv