当前位置: 代码迷 >> Ajax >> 留神"Ajax"的异步
  详细解决方案

留神"Ajax"的异步

热度:409   发布时间:2013-08-27 10:20:47.0
当心"Ajax"的异步

表单的用户名,需要实时验证,如有重复,用户点击提交,页面应该提示“已经被注册了”。给该输入框加上onblur事件,便于输入框失去焦点后,马上验证。代码如下:

?

Js代码??收藏代码
  1. function?hasExisted()?{??
  2. ????var?obj?=?document.getElementById('username');??
  3. ????$.post("a.php",?{?username:?obj.value?},??
  4. ?????????function(data){??
  5. ???????????if(1?==?data)?{??
  6. ???????????????return?false;??
  7. ???????????}?else?{??
  8. ???????????????return?true;??
  9. ???????????}??
  10. ?????????}??
  11. ?????);??
  12. ????return?true;??
  13. }??

?

注意:上述代码并不能按预期运行。

?

当光标从输入框离开时,该函数能正常工作。因为jquery默认用“异步”的方式,当点击表单的提交按钮时,虽然onsubmit事件去做上述的验证,由于“异步”要花费点时间,程序好像跳过了它,继续往下进行了。所以,就出现了------该函数好像不管用的现象。

?

解决办法

?

不能直接用jquery提供的$.post方法,而是用原始的$.ajax,里面的options可以详细指定各个参数配置,比如:

?

Js代码??收藏代码
  1. var?html?=?$.ajax({??
  2. ?url:?"some.php",??
  3. ?async:?false?//设为同步??
  4. }).responseText;?
  相关解决方案