黑马程序员技术交流社区

标题: XMLHttpRequest创建失败 [打印本页]

作者: 佟亚鹏    时间: 2012-9-16 15:49
标题: XMLHttpRequest创建失败
本帖最后由 佟亚鹏 于 2012-9-16 18:34 编辑

问题还没解决,各位大神们有时间帮看下吧,别在沉贴了,写一个用户名校验的例子,当用户提交注册信息时,检查用户名是否存在,不刷新页面,异步的检查用户名是否存在,根据是否存在的结果 ,在页面上提示用户相应信息 ,使用jquery成功的完成了,但是使用原始的XMLHttpRequest ,失败,我把 new出来的XMLHttpRequest 的对象打印了出来,结果是空的,为什么会创建失败,求解
使用jquery
  1. function checkUsername {
  2.         var username = $("#username").val();
  3.         usernameIfExist(username);
  4. }
  5. function usernameIfExist(username) {
  6.         $.get("checkUsernameServlet?username=" + username,null,function(data) {
  7.         if (data == true){               
  8.                         usernameMSGObj.html("<font color='red'>这个用户名已经被注册,请重新输入</font>");
  9.                 }
  10.                 else{
  11.                         usernameMSGObj.html("<font color='red'>可以使用的用户名</font>");
  12.                 }
  13.     });
  14. }
复制代码
使用XMLHttpRequest 对象
  1. var xmlHttp;
  2. function  usernameIfExist () {
  3.     var username = document.getElementById("username").value;
  4.     xmlHttp = new XMLHttpRequest();
  5. //if(!xmlHttp) {
  6. //alert("xmlHttp fail");//弹出了失败信息
  7. //return;
  8. //}
  9.     xmlHttp.onreadystatechange = callBack;  
  10.     xmlHttp.open("GET"," checkUsernameServlet ?name=" + username);
  11.     xmlHttp.send(null);
  12. }

  13. function callBack() {
  14.    if(xmlHttp.readyState == 4) {
  15.        if(xmlHttp.status == 200) {
  16.            var result =  xmlHttp.responseText ;
  17.            if (result== true){
  18.               usernameMSGObj.html("<font color='red'>这个用户名已经被注册,请重新输入</font>");
  19.            }
  20.           else{
  21.             usernameMSGObj.html("<font color='red'>可以使用的用户名</font>");
  22.          }            
  23.        }
  24.    }
  25. }
复制代码

作者: 谭立文    时间: 2012-9-16 16:02
XmlHttpRequest的创建方法不是直接 new出来的,因为考虑到每个浏览器对请求服务器连接的方式可能不一样,像微软的IE就有自己的一套做法,我不知道JavaScript为什么没有替你去封装,可能是考虑到以后的扩展性问题。
创建XmlHttpRequest的方法是
function getXmlHttpReq()
{
                        var xmlHttpReq;
                        try {
                                xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
                        }
                        catch(e)
                        {
                                try{
                                         xmlHttpReq = new XMLHttpRequest();
                                }catch(e){
                                }
                        }
                        return xmlHttpReq;
}
我看到你的代码中其实是用到了jQuery框架的,其实jQuery框架对Ajax的支持是比较好的,不需要你手动的去做,它都帮你做好了$.get(url,"",function(data, state, xmlHttpRequest)
{
});                                 
  jQuery框架在你调用get时已经帮你创建了一个XmlHttpRequest请求对象,并作为参数传递给callback function了。
作者: 程金    时间: 2012-9-16 16:05
本帖最后由 程金 于 2012-9-16 16:07 编辑

抱歉,又没看清就回答了,以后还是看见代码先运行一下再说

作者: 佟亚鹏    时间: 2012-9-16 16:33
谭立文 发表于 2012-9-16 16:02
XmlHttpRequest的创建方法不是直接 new出来的,因为考虑到每个浏览器对请求服务器连接的方式可能不一样,像 ...

我是想用底层点的写下试试,xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");,我找你的代码改了下,在ie上能用了,在chrome上又不能用了,难道说如果用这种方法写,每个浏览器都要有一套代码吗
作者: 谭立文    时间: 2012-9-16 16:48
佟亚鹏 发表于 2012-9-16 16:33
我是想用底层点的写下试试,xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");,我找你的代码改了 ...

我用的搜狗浏览器,支持得还比较好,你可以去google一下,chrome浏览器是如何获得XmlHttpRequest,知道这个方法不是唯一性的就好了,至于是不是每个浏览器都有自己的一套搞法那就不好说了,像微软这种大BOSS他就喜欢有自己的一套搞法,具体问题,等遇到再去查一下就好了,不需要太纠结。
作者: 佟亚鹏    时间: 2012-9-16 18:34
谭立文 发表于 2012-9-16 16:48
我用的搜狗浏览器,支持得还比较好,你可以去google一下,chrome浏览器是如何获得XmlHttpRequest,知道这 ...

嗯  你说的对。还是用jquery方便,都给封装好了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2