Javascript 当用户要写东西时,如何防止重新加载?
我的网站有一个简单的信息系统,用户写信息,收件人回复,这就是聊天 我使用HTML保持页面刷新,直到用户收到新消息Javascript 当用户要写东西时,如何防止重新加载?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的网站有一个简单的信息系统,用户写信息,收件人回复,这就是聊天 我使用HTML保持页面刷新,直到用户收到新消息 <meta http-equiv="refresh" content="15;URL=chat_5999468.php"/> 它每15秒刷新一次页面,因此如果有新消息入侵,它会弹出但即使收件人正在键入,它也会重新加载页面 当用户在jQuery中键入消息时,如何防止重新加载 编辑:页面HTML(与此类似): Untitled#b{color:#000;}聊天输入[ty
<meta http-equiv="refresh" content="15;URL=chat_5999468.php"/>
它每15秒刷新一次页面,因此如果有新消息入侵,它会弹出但即使收件人正在键入,它也会重新加载页面
当用户在jQuery中键入消息时,如何防止重新加载
编辑:页面HTML(与此类似):
Untitled#b{color:#000;}聊天输入[type=“text”]{宽度:65%;高度:30px;边框:1px实心#999999;边框右上半径:10px;边框左下半径:15px;填充:10px;颜色:#0084ff;左边距:5px;边距顶部:10px;边距底部:10px;}输入:焦点,按钮:焦点,输入,按钮{轮廓:无!重要提示;}.chat输入[type=“submit”]{color:#000;背景:url(https://i.stack.imgur.com/NAjD2.jpg)无重复;高度:47px;宽度:47px;边框:无;}.chat77 ul{列表样式:无;边距:0;填充:0;}.chat77 ul li{显示:内联块;清除:两个;填充:8px;边框半径:30px;页边距底部:2px;字体系列:Helvetica,Arial,无衬线;}.message-2{背景:eee;float:left;}.message me{float:right;背景:0084ff;颜色:#fff;}.message 2+。message me{边框底部右半径:5px;}.message 2+。message me{{border右上半径:5px;border右下半径:5px;}。消息我:类型{border右下半径:30px;}的最后一个联机标记扎克伯格|
var book=“me:3”;if(book=”me:3”){document.write(“ ”);否则{document.write(“”);}var book=“Mark Zuckerberg==“Me:2”{document.write(“ ”);else{document.write(”);var book=“Me:Message1”;if(book==“Me:Message1”){document.write( ”);else{document.write();ul>
我所能想到的就是jQuery.ajax()
如果你想为你的meta
标签找一个替代品,这个答案是为你准备的。
您可以获取更新站点的内容,搜索特定的div
或类似内容,并检查是否有新条目
这只是一个例子你如何做到这一点 首先,创建一个循环函数:
setInterval(function(){
}, 15000); // The loop function will check every 15 seconds
然后,创建ajax()
调用
$.ajax({
url: 'YOUR URL HERE',
type: 'GET',
success: function(data) {
var check = $(data).find('#chat');
// Here you get the `div` -> `#chat`
// Now you could check if there is something new
}
});
我不知道你的聊天是如何编码的,但我想可能有时间戳。只要检查一下是否有一个时间戳比你打开的网站更新的div
(?):
var compareMe = $('#chat').find('.entry span').last().attr('class');
var compareOther = $(data).find('.entry span').last().attr('class');
在我的例子中,有一个div
和id=“chat”
,这有一个div
,它有一个class=“entry
,它有一个span
和class=“1504155239”
(这是消息的时间戳)
下面是一个例子:
var compareMe=$('#chat').find('.entry span').last().attr('class');
console.log(compareMe);
1504155239:
你好!首先!
1504155254:
嘿!啊,我是第二?
暂停刷新只会导致更多问题。更好的办法是根本不使用刷新/轮询模式。研究WebSocket或服务器端事件。但我目前正在使用它。现在更改整个系统对我来说不是个好主意!如果你的用户已经在抱怨,那么你要做的就是这样做不会更好use@Rory为了更好,我问了这个问题!完全同意第一条评论(查看您的整个设计),因此我不会将其作为答案发布,但要停止元刷新,请使用window.stop()
。尤其是我的网站针对功能手机进行了优化!但是我无法继续使用时间戳。用户肯定可以看到他收到了该消息,但形式如下:-示例:-2017年8月31日01:03PM。不幸的是,我没有任何类似的时间戳功能!只需使用不同的选择器?您可以用其他选择器解释吗?在我的代码中,我检查find('.entry span').last().attr('class'));
。只需将此更改为您想要的id/class
或div/span/element/…
。糟糕的是,我不知道您的“聊天”是什么样子。我已经包括了DOM!代码可能需要过滤。这很难阅读!
var compareMe = $('#chat').find('.entry span').last().attr('class');
var compareOther = $(data).find('.entry span').last().attr('class');