jQuery Bootgrid分页问题:请求方法异常与current参数缺失
解决jQuery Bootgrid的两个分页问题
我帮你梳理下这两个问题的原因和解决方案,应该都是配置细节没踩对:
问题1:POST请求强制无效,默认用GET发送
jQuery Bootgrid的AJAX默认请求方法就是GET,只写ajax: true不会自动切换为POST。要强制改用POST,你需要把ajax配置从布尔值改成对象,显式指定请求方法:
ajax: { url: "http://localhost/do_dubai/vat_invoice/get_list/", method: "POST", // 核心:覆盖默认的GET请求 contentType: "application/x-www-form-urlencoded; charset=UTF-8", // 适配后台表单参数接收逻辑 processData: true },
之前你尝试在其他地方指定POST无效,是因为ajax: true会触发Bootgrid的默认AJAX配置,里面硬编码了GET方法,必须通过这个对象配置来覆盖默认行为。
问题2:点击分页时current参数丢失
你提到首次加载current=1正常,但分页切换时参数消失,大概率是Bootgrid的默认分页参数名是page,而你的后台期望接收current。虽然首次加载可能因为初始化逻辑巧合传了current,但分页操作时Bootgrid只会传递它默认的page参数。
解决方法是用requestHandler函数,把Bootgrid默认的page参数映射成你需要的current,确保每次请求(包括分页点击)都带上这个参数:
requestHandler: function(request) { // 将Bootgrid默认的page参数转为后台需要的current request.current = request.page; // 如果后台不需要page参数,可以删掉它 // delete request.page; return request; },
另外,建议显式加上pagination: true(虽然默认值是true),避免因为其他配置冲突导致分页逻辑失效。
整合后的完整代码
把上面的配置整合到你的代码里,最终版本应该是这样:
var grid = $("#grid-data").bootgrid({ ajax: { url: "http://localhost/do_dubai/vat_invoice/get_list/", method: "POST", contentType: "application/x-www-form-urlencoded; charset=UTF-8", processData: true }, rowCount: [200, 100, 50, -1], pagination: true, requestHandler: function(request) { request.current = request.page; return request; }, post: function() { return { "date_from": $("#date_from").val(), "date_to": $("#date_to").val(), "status": $("#status").val() }; } });
最后提醒下:如果后台之前是用GET方式接收参数,改成POST后要对应调整参数获取方式(比如PHP里从$_GET改成$_POST),不然也会出现参数接收不到的情况。
内容的提问来源于stack exchange,提问作者Wazan
相关产品推荐
相关产品推荐

