我有一个简单的社交网站,提供聊天功能。我在多个页面中经常使用$.post
。
该代码适用于除message.php之外的所有页面,其中用户消息被多次发布和提取
$.post
(曾经在本地服务器上运行良好)。
当用户之间的消息传递模拟时,网站停止响应。重新加载时,服务器关闭并显示ERR_EMPTY_RESPONSE消息。该网站在几分钟后再次投入使用。据我所知,这种情况发生在频繁使用$ .post的网页上。
总结一下情况,我创建了一个 live test page。当输入连续几秒钟时,会发生 ERR_EMPTY_RESPONSE 。
页面内容:
的 a.php只会
<script>
$(document).ready(function(e) {
$(".abc").keyup(function(){
var a = $(this).val();
$(".showoff").text("wait..");
$.post('bbs.php',{a:a},function(abc){
$(".showoff").html(abc);
});
});});
</script>
<input type="textbox" class="abc">
<div class="showoff">Type to Change Me!</div>
bbs.php
<?php
echo $_POST['a'];
?>
我在墙上用力打了一个星期。所以,请帮我解决这个问题。 提前致谢。 对不起我的蹩脚英语。
答案 0 :(得分:2)
由于您似乎需要自动完成类型设置,请使用计时器。在每次按键时重置它,并在延迟发送你的帖子后。在这个例子中,它将在最后一次按键后发送3秒。
$(document).ready(function(e) {
var timer;
$(".abc").keyup(function() {
var $input= $(this);
// Start timer
clearTimeout(timer);
// Start a new 3 second timer
timer = setTimeout(function() {
// Once the
var a = $input.val();
$(".showoff").text("wait..");
$.post('bbs.php', {
a: a
}, function(abc) {
$(".showoff").html(abc);
});
}, 3000);
});
});
JSFiddle: https://jsfiddle.net/TrueBlueAussie/Locpnk35/
这样可以避免服务器过载,因为同一个用户每3秒钟发出的请求不超过1个。如果响应慢于3秒,您可能还需要在Ajax请求正在进行时禁用密钥处理程序。
答案 1 :(得分:1)
最简单的答案是您允许您的服务器被垃圾邮件发送到它停止响应(但仍然收到新连接)。如果连接没有及时关闭(解决),你也会遇到与域的并发浏览器连接的限制(我认为这实际上正在发生 - 浏览器阻止你做出这些请求)。
您可以切换到套接字,也可以按设定的时间间隔将文本发送到服务器。或者你不允许下一篇文章,直到之前的文章被解决。
答案 2 :(得分:1)
您可以在第一篇帖子之前移除处理程序,并在帖子返回时再次将其设置回来,而不是允许您的服务器被垃圾邮件发送。
$(document).ready(function(e) {
var $abc = $('.abc'); //good idea to cache those jQuery selectors!
function abcPost() {
$abc.off('keyup', abcPost)
var a = $(this).val();
$(".showoff").text("wait..");
$.post('bbs.php', {
a: a
},
function(abc) {
$(".showoff").html(abc);
$abc.on('keyup', abcPost)
});
}
$abc.on('keyup', abcPost);
});
答案 3 :(得分:1)
Ajax同步:使ajax调用同步。这将停止其线程,直到响应返回,易于实现但带有用户无法再输入的缺点直到请求已解决
$.ajax({
url: 'bbs.php',
data: {a:a},
success: function(abc){
$(".showoff").html(abc);
},
async: false
});
全局变量检查:创建一个全局变量,用于检查先前请求的状态,并且在解决之前不允许将来的请求:
var waiting=false;
$(".abc").keyup(function(){
if(!waiting){
waiting = true;
// code
$.post('bbs.php',{a:a},function(abc){
$(".showoff").html(abc);
waiting=false;
});
}
});
答案 4 :(得分:1)
这很好。
const sortorder =['self_owner','wife','mother','son','grand_child']
const arr = [
{
name: "Baburam",
relation: "self_owner"
},
{
name: "Prapti",
relation: "grand_child"
},
{
name: "Sanjay",
relation: "son"
},
{
name: "Bhagwati",
relation: "wife"
},
{
name: "maya",
relation: "mother"
},
]
let sorted = arr.sort((a,b) => sortorder.indexOf(a.relation) - sortorder.indexOf(b.relation));
console.log(sorted);