javascript - 使用 AJAX 请求的用户输入查询不会更新 history.pushState,如果不重新加载页面就无法解析
问题描述
设想:
用户开始202
在输入文本字段中输入内容,AJAX 请求?keyword=202
作为 URL 的一部分发送。内容更新成功。用户将更新关键字添加到2020
,仍然发送另一个 AJAX 请求,但仍?keyword=202
作为 URL 的一部分。
如果用户重新加载,尝试调整搜索2020
,他们将面临与上述基本相同的问题。第一次尝试有效,任何后续尝试“失败”。
如果我window.history.pushState
从我的函数中删除 ,userString
我发送给 的console.log()
似乎会使用输入进行更新,但是在尝试更新时window.history.pushState
,它会将其视为 URL 似乎与第一个也是唯一成功的请求相同。
下面是我正在尝试做的一个例子。
$(document).on('keyup', $keywordSearchInput, function() {
const userSearchStr = $keywordSearchInput.val().toString();
if(userSearchStr.length >= 3) {
if('URLSearchParams' in window) {
const searchParams = new URLSearchParams(window.location.search)
searchParams.set('keyword', userSearchStr);
const newRelativePathQuery = window.location.pathname + '?' + searchParams.toString();
updateDynamicView(newRelativePathQuery, '')
}
}
});
function updateDynamicView(userQuery, userString) {
console.log(userQuery, userString);
window.history.pushState(null, null, userQuery);
$('.loading').addClass('js-active');
$('#dynamic-view-content').hide();
$('#dynamic-view').load(`${userQuery} #dynamic-view`, function() {
$('.loading').removeClass('js-active');
$('#dynamic-view-content').show();
});
}
解决方案
推荐阅读
- javascript - 如何真正计算 UTF-8 字符,以及不同字符长度的表情符号和特殊字符?
- r - 使用 randomForest 包在随机森林中的分类输出
- go - 信号 goroutine 在通道关闭时停止
- java - Websphere 8.5 应用程序服务器无法将消息发送到响应队列
- java - 在 setScreen(new Screen2()) 之后无法停止渲染前一个 Screen1();
- sdl-2 - 在 Windows 10 中安装 Common Lisp Sketch 时出现问题
- c++ - 如何在 UML 类图中表示纯虚函数?
- swift - 使用 reloadData() 使滚动条在 UITableView 上始终可见
- docker - Docker 增加容器内存
- scala - 处理将数据帧保存到 Hbase-spark scala 的代码时出错