2015-06-20 65 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查詢的時間。