2015-06-20 66 views
1

以下Ajax的工作原理,但它需要一段时间只是为了在客户端的用户名已经采取通知用户。有没有什么办法来解决这个问题,或者这只是Ajax的正常行为。上这个Ajax响应

客户:

<title>Choose a username</title> 

    <style> 
    #targetDiv { 
     background-color: #FF9999; 
     width: 40%; 
    } 
    </style> 

    <script type = "text/javascript"> 
     var XMLHttpRequestObject = false; 

     if (window.XMLHttpRequest) { 
     XMLHttpRequestObject = new XMLHttpRequest(); 
     } else if (window.ActiveXObject) { 
     XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

     function getData(dataSource) 
     { 
     if(XMLHttpRequestObject) { 
      XMLHttpRequestObject.open("GET", dataSource); 

      XMLHttpRequestObject.onreadystatechange = function() 
      { 
      if (XMLHttpRequestObject.readyState == 4 && 
       XMLHttpRequestObject.status == 200) { 
       if(XMLHttpRequestObject.responseText == "taken"){ 
      var targetDiv = document.getElementById("targetDiv"); 

      targetDiv.innerHTML = "<div>That username is taken.</div>"; 
       } 
      } 
      } 

      XMLHttpRequestObject.send(null); 
     } 
     } 

     function checkUsername(keyEvent) 
     { 
     keyEvent = (keyEvent) ? keyEvent: window.event; 
     input = (keyEvent.target) ? keyEvent.target : keyEvent.srcElement; 

     if (keyEvent.type == "keyup") { 
      var targetDiv = document.getElementById("targetDiv"); 
      targetDiv.innerHTML = "<div></div>"; 

      if (input.value) { 
      getData("check.php?name=" +input.value); 
      } 
     } 
     } 
    </script> 

    </head> 

    <body> 

    <H1>Choose a username</H1> 

    Enter your new username <input id = "textField" type = "text" 
     name = "textField" onkeyup = "checkUsername(event)"> 

     <div id = "targetDiv"><div></div></div> 

    </body> 

</html> 

服务器

<?php 
    if ($_GET["name"] == "steve"){ 
     echo "taken"; 
    } 
    else { 
     echo "ok"; 
    } 
?> 
+0

你可以试试。 –

回答

3

你的问题是“如何系统响应”。

响应是由您的服务器通过网络发送的。 净转移所花费的时间总是不一样。 但是,您可以尝试通过优化Web服务器和PHP的配置来获得更快的服务器响应。您可以使用基准工具(如absiege)来测试服务器的响应行为。 然后调整,测试,比较结果,重复直至满意。 对服务器的请求是对服务器的请求。无论如何,如果它是通过浏览器通过ajax或基准工具完成的。

例如,升级到PHP 5.6,并启用和调整opcache,给人相当的性能提升,比起让我们说PHP 5.3的时候。可能有很多优化。这个问题过于宽泛,无法详细说明。

当寻找在客户端JS:这是纯香草JS。 没有太多的改进空间。它在我脑海中的唯一的事情是 为IE的xhrObject从"Microsoft.XMLHTTP,这是真的老了改变,以new ActiveXObject("Msxml2.XMLHTTP.6.0");(也许后备添加到new ActiveXObject("Msxml2.XMLHTTP.3.0");)。

+1

是的,我使用PHP 5.3,让我尝试升级,并看到改善。 +1 –

+0

兄弟谢谢你,你100%真实,我升级到5.6.xx,它更快! –

+0

不错!很高兴我能帮上忙! –

1

它总是需要一段时间才能从服务器获取的响应,你可以调整你的服务器是快,但你永远有一个延迟。

但是你可以做的是显示加载飞溅,而你正在与服务器连接。

1

您也可以尝试存储的用户名在Memcached的,因为它会减少用于SQL查询的时间。