2011-12-31 89 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