如何优化使用ajax调用的php函数?
我目前有一个函数,您可以使用ajax请求搜索此php文件。问题是这个文件很重,导致搜索结果延迟和延迟。例如,如果我搜索John doe,搜索框中会显示:搜索John然后延迟2秒,然后添加doe。ajax请求在key up上调用,php文件如下所示: 如何优化函数以使其在返回数据时更快? 请看gif中我在那里写“你好”的演示如何优化使用ajax调用的php函数?,php,ajax,Php,Ajax,我目前有一个函数,您可以使用ajax请求搜索此php文件。问题是这个文件很重,导致搜索结果延迟和延迟。例如,如果我搜索John doe,搜索框中会显示:搜索John然后延迟2秒,然后添加doe。ajax请求在key up上调用,php文件如下所示: 如何优化函数以使其在返回数据时更快? 请看gif中我在那里写“你好”的演示 var延迟=20000 你看,你打了多个电话,只是一个接一个的延迟。因此,您将收到多个AJAX调用,每个调用都在20000次之后,获得竞争条件。检查值在20000之后是否发
var延迟=20000
你看,你打了多个电话,只是一个接一个的延迟。因此,您将收到多个AJAX调用,每个调用都在20000次之后,获得竞争条件。检查值在20000之后是否发生了变化,如果没有,则调用API,否则只需中断函数即可
编辑:
在伪代码中,它将是:
var delay = 20000;
await new Promise(r => setTimeout(r, delay));
if (oldTextInput == currTextInput){
$.ajax({
type: "POST",
url: url,
data: {
term: filter,
token: "<?= $_SESSION['sess_id']; ?>"
}, // serializes the form's elements.
success: function(data) {
$(".ajaxTicketSocket").html(data);
},
error: function(data) {
$(".ajaxTicketSocket").html(data);
}
}, 100);
}
var延迟=20000;
等待新的承诺(r=>setTimeout(r,delay));
如果(oldTextInput==currTextInput){
$.ajax({
类型:“POST”,
url:url,
数据:{
术语:过滤器,
令牌:“
},//序列化窗体的元素。
成功:功能(数据){
$(.ajaxTicketSocket”).html(数据);
},
错误:函数(数据){
$(.ajaxTicketSocket”).html(数据);
}
}, 100);
}
您应该在按键时添加一个600毫秒的超时,并在每次按键“缓冲”请求时重置超时,然后当用户停止输入600毫秒时,超时执行并发送请求进行搜索。我也毫不延迟地尝试了,我仍然得到与上面gif相同的延迟和结果,键入长单词时:/Check my edit。只需使用document.GetElementById从输入中获取值,在延迟之前保存旧值,并将其与延迟之后的值进行比较。
function searchAjaxTicket(str) {
// Declare variables
var input, filter, table, tr, td, i, txtValue, response;
input = document.getElementById("ajaxTicket");
filter = input.value;
if (filter === '') {
$('.ajaxTicketSocket').hide();
} else {
$('.ajaxTicketSocket').show();
}
if (!filter.trim()) {
$(".ajaxTicketSocket").html('');
} else {
$(".ajaxTicketSocket").html('<div class="col-md-12 mt-2 searchAjaxTicketLabel">Söker efter <b>' + stripHTML(
filter) + '</b> <i class="fas fa-spinner fa-spin" style="font-size: 0.7em;"></i></div>').fadeIn();
// $(".ajaxTicketSocketResponse")
var form = $(this);
var url = '<?= $main->baseUrl(); ?>/cgi/search.php';
var delay = 20000;
$.ajax({
type: "POST",
url: url,
data: {
term: filter,
token: "<?= $_SESSION['sess_id']; ?>"
}, // serializes the form's elements.
success: function(data) {
$(".ajaxTicketSocket").html(data);
},
error: function(data) {
$(".ajaxTicketSocket").html(data);
}
}, delay);
}
}
<input type="text" onkeyup="searchAjaxTicket(this.value)" class="form-control font-weight-light ajaxTicket" id="ajaxTicket" placeholder="Search ticket or order..." autocomplete="FALSE">
var delay = 20000;
await new Promise(r => setTimeout(r, delay));
if (oldTextInput == currTextInput){
$.ajax({
type: "POST",
url: url,
data: {
term: filter,
token: "<?= $_SESSION['sess_id']; ?>"
}, // serializes the form's elements.
success: function(data) {
$(".ajaxTicketSocket").html(data);
},
error: function(data) {
$(".ajaxTicketSocket").html(data);
}
}, 100);
}