2015-04-05 19 views
0

当我在聊天中发布消息时,它不会让我再发帖。我相信这是与相关的代码发送:我正在创建一个聊天,但每次发送消息时,都不会让我发送另一条消息,就像表单不起作用一样?

window.typing = false; 
var posted = 0; 
var canPost = 1; 
var donotrefresh = 0; 

document.forms['send'].addEventListener('submit', function (event) { 

    event.preventDefault(); 
    if (!this.message.value || !canPost) { 
     return 0; 
    } 
    var form = this; 
    var message = this.message.value; 
    this.message.value = ""; 
    this.message.focus(); 
    var ajax = new XMLHttpRequest(); 

    posted = 1; 
    canPost = 0; 
    chat.refresh(); 
    chat.messages.scrollTop = 0; 

    ajax.onreadystatechange = function() { 
     if (ajax.readyState >= 4 && ajax.status == 200) { 
      if (!ajax.responseText) { 
       canPost = 1; 
       posted = 0; 
      } 
     } 
    } 

    ajax.open("GET", "/chat/ajax.php?req=post&chatmsg=" + encodeURIComponent(message), true); 
    ajax.send(null); 
}, false); 

这里是我提交代码:

<form name="send" style="height:100px;width:100%"> 
    <input type="text" name="message" style="width:60%;height:2em;resize:vertical;opacity:0.8;" maxlength="220" placeholder="Your message to send..." required /> 
    <input type="submit" value="Send" style="vertical-align:top;opacity:0.8;" /> 
</form> 
+0

为什么这个'canPost = 0'? – callback 2015-04-05 08:18:53

+0

你有什么尝试?当你“不能再发布”时,你看到了什么确切的行为?你在浏览器的JavaScript控制台中寻找什么? – 2015-04-05 08:19:16

+0

您确定ajax请求成功完成吗?如果不是,canPost永远不会再次设置为1,因此您的提前退货将取消进一步发送消息的方法。或者看看你的javascript控制台的“网络”选项卡,或者向回调函数(设置canPost = 1的位置)插入一个断点(或简单的日志记录输出) – 2015-04-05 08:30:43

回答

0

尝试删除,如果(ajax.responseText!)

ajax.onreadystatechange = function() { 
    if (ajax.readyState >= 4 && ajax.status == 200) { 
     canPost = 1; 
     posted = 0; 
    } 
} 

待办事项你需要“发布”变量?看起来这不再被代码使用。 canPost的目的似乎在同一时间避免请求。这里是否真的要避免这一点?

+0

非常感谢@jan这完美的工作!我真的不知道你的问题是什么,但它做我需要的,所以我很高兴,谢谢你:) – Buzzytechy 2015-04-05 22:24:48

相关问题