嘿伙计们,有更有效的方法吗?
setInterval('getAllWords()', 2000);
function getAllWords() {
$.ajax({
type: "GET",
url: "queries.php",
data: "action=all",
success: function(data){
dataArray = data.split('|');
$('#words').html('');
for (var i = 0; i < dataArray.length; i++) {
if ((dataArray[i]).length > 1) {
$('ul').append('<li>' + dataArray[i] + '</li>');
}
}
}
});
}
ELABORATION(?)
这基本上每隔2秒连接一次数据库并检查更新后的单词,是否有一种简单的方法来实现push
请求或什么来最小化数据库活动?
更多信息:
我的托管不支持安装AJAX推送服务器,他们不会为我安装
答案 0 :(得分:1)
听起来你想要server push
答案 1 :(得分:1)
如果你无法安装推送服务器,请考虑这个黑客:
运行一个无限循环,只有在有新内容时才会发送你的ajax请求的答案(while(true){检查更新的单词})。
在您的ajax代码中,您可以简单地启动一个请求,并在完成后立即启动一个请求(例如,readyState == 4 - &gt;启动新请求)
答案 2 :(得分:0)
如果您不需要Internet Explorer支持,可以使用webSockets
否则有几种标准方法可以实现server push
以下是实施long polling using php的方法 - 使用谷歌查找更多信息:)
答案 3 :(得分:0)
如果在您的数据库服务器上启用了查询缓存,那么这不应该让您担心。在单词字段更新之前,查询cacher将不会加载数据库。
另一方面,
我更喜欢使用setTimeout而不是使用setInterval。如果来自服务器的响应需要超过2秒才能返回怎么办? 即使先前的请求未完成,setInterval也会再次发出请求。
所以, 我会用这个
function getAllWords() {
$.ajax({
type: "GET",
url: "queries.php",
data: "action=all",
success: function(data){
dataArray = data.split('|');
$('#words').html('');
for (var i = 0; i < dataArray.length; i++) {
if ((dataArray[i]).length > 1) {
$('ul').append('<li>' + dataArray[i] + '</li>');
}
}
setTimeout(getAllWords,2000);
}
});
}
getAllWords();
答案 4 :(得分:0)
缩小db活动,你可以:
OR
答案 5 :(得分:-1)
您可以使用setInterval()
功能,但方法的效率取决于您的要求。
请告诉我你的要求。