2011-12-31 90 views
0

這些都是我的文件:如何使AJAX調用等待服務器端響應?

的index.html

<form action="#" method="POST">       
<label for="Username">Username :</label><br/> <input type="text" id="Username" name="username"/><span id="usr"></span><br/> 
<label for="Email">Email :</label><br/> <input type="text" id="Email" name="email"/><br/> 
<input type="submit" value="Register" id="submit"/> 
</form> 

userresponse.php

<?php 
require ("DBC.php"); 
$usern = $_POST["username"]; 
function isAvailable($str) 
     { 
      $sql= "SELECT username FROM mytable WHERE username = '$str'"; 
      $result=mysql_query($sql)or die(); 
      $count = mysql_num_rows($result); 

      if($count>0) 
       return true; 
      else 
       return false; 
     } 

if (isAvailable($usern) == true) 
    echo "false"; 
else  
    echo "true"; 

?> 

checkuser.js

$(document).ready(function() { 
var usrn = $("#Username"); 
var usr = $("#usr"); 

usrn.blur(function(){ 
if(usrn.val()=="") 
    { 
     usr.html("Empty field"); 
     return false; 
    } 
else 
    { 
    var username = usrn.val(); 
    usr.html('Cheking username...'); 
       alert(username); 
    $.ajax({ 
      url: "userresponse.php", 
      type: "POST", 
      data: username, 
      success: function (data) { 
      if(data.val() == "true")  
      { 
       usr.html('Available username'); 
      } 
      else if(data.val() == "false") 
      { 
       usr.html('Username already taken'); 

      } 
      }}) 
     return data.val(); 
    } 
}); 
     }); 

我知道AJAX是異步的,不會等待來自服務器的響應,但我想知道如何解決它並使此呼叫等待響應。

+3

歡迎堆棧溢出!請注意,您已經編寫了一個易受[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)漏洞影響的腳本,因爲您尚未清理SQL查詢中的任何用戶提供的變量。請使用[PHP Prepared Statements](http://php.net/manual/en/pdo.prepared-statements.php)來防止這些漏洞。謝謝。 – sarnold 2012-01-01 00:04:04

回答

0

你已經把一個叫選項「的成功:」在你的$就調用 你怎麼啦?它已經等待請求完成並獲得響應

-1

在您的代碼中,將async屬性設置爲「true」。

默認情況下,異步屬性爲「true」,但將其設置爲false將強制該函數等待,直到它收到響應/超時。

另一種工作方式是使用success()和error()事件。

詳細資料請參考以下頁面。對於「設置」單證是要看看:

http://api.jquery.com/jQuery.ajax/

+0

實際上你已經倒過來了......默認情況下async被設置爲true(調用是異步的)並將它設置爲false告訴它發出同步請求! – vdbuilder 2012-01-01 00:12:25

+0

你好,謝謝你的回答我確認BeatMasta先生是正確的,如果你在你的$ .ajax調用中設置回調選項「success:」,那麼不需要async:false。我遇到了一個問題,我的查詢女巫使ajax調用失敗。 – 2012-01-01 10:48:39