如何获取AJAX排序请求返回结果对应的可访问URL地址
AJAX排序功能对应可访问URL获取方案
你现有POST类型的排序AJAX逻辑不需要改动,只需要在排序触发、组装AJAX参数的环节,同步拼接生成对应带orderby参数的URL即可,具体实现逻辑如下:
- 先取基础路径:不要硬编码写死域名和路径,直接用浏览器内置API取当前店铺页的域名+路径部分,
window.location.origin + window.location.pathname就能拿到类似https://domen.com/shop/的基础地址,后续换域名、改页面路径也不需要调整代码 - 提取排序参数值:从你传给AJAX的
data对象里取出orderby字段的取值(比如price、date、sales这类排序规则值) - 拼接生成目标URL:把排序参数拼到基础路径后,就能得到你需要的
https://domen.com/shop/?orderby=xxx格式的地址 - 可选优化:调用
history.pushState可以在不刷新页面的情况下,把浏览器地址栏的地址替换成你拼接好的排序URL,方便用户直接收藏、分享当前排序结果页
代码实现示例
直接在你原有逻辑里加URL生成部分即可,参考代码如下:
// 排序触发逻辑(以点击排序选项为例,根据你实际的触发场景调整) $('.sort-trigger').on('click', function() { // 你原本传给AJAX的参数对象,保持你原来的结构即可 const requestData = { action: 'get_sorted_list', // 你原有的AJAX接口action参数 orderby: $(this).attr('data-sort-key') // 取出当前选中的排序规则值,比如price // 其他你原本要传的参数保持不变 }; // 新增:生成对应排序页URL const basePageUrl = window.location.origin + window.location.pathname; const sortResultUrl = `${basePageUrl}?orderby=${requestData.orderby}`; // 拿到sortResultUrl即可按需使用,比如赋值给分享按钮、打印调试等 console.log(sortResultUrl); // 可选:同步更新浏览器地址栏,无刷新 history.pushState(null, '', sortResultUrl); // 你原有的AJAX请求逻辑完全不用改动 $.ajax({ url : orderby_params.ajaxurl, data : requestData, type : 'POST', beforeSend : function(xhr){ }, success : function(res){ if(res){ $('.list-thumbs').html(res); } } }); })
补充说明:如果你的列表还有其他筛选条件(比如分类、价格区间、分页),只需要把对应参数也追加到URL查询串上,多参数用
&分隔即可。如果需要支持用户直接访问拼接好的带参URL,只需要在页面初始化时读取URL上的orderby等参数,自动触发一次对应参数的AJAX请求,就能实现直接打开对应排序结果页的效果。
内容的提问来源于stack exchange,提问作者Andrei Lyashko
相关产品推荐
相关产品推荐

