码迷,mamicode.com
首页 > Web开发 > 详细

新手学ajax2

时间:2016-05-07 00:59:11      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

   今天主要解决了一个困扰两天的ajax问题,就是关于从服务器获取数据时的同步和异步问题 ,
xhr.open("GET", url,false); 这里有三个参数“GET”表示获取的方式,除了get还有post,head,第二个便是地址这个地址是服务器中的你要获取的文件的地址,这个文件可以是XML也可以是txt,请注意此处是服务器地址,对应到的是tomcat下的目录,例如:var url=http://localhost:8080/wxPay/code.txt;指的是tomcat下webapp下的wxPay下的code.txt的内容,所以你要把服务器的内容放在相应目录下才能被客户端获取,最后一个参数是false 这个是我今天最想说的,就是这个把我推到了坑里,原来我是把它设为true,原先不知道这个是什么意思,后来程序总是出现一个问题就是,js函数的返回值是空的但是如果我在前面加一个alert输出返回的变量那么返回值就正常了但是alert就为空,当时感觉神奇并茫然,后来经过自己调试把问题定位到与服务器交互时出的问题,然后抱着试试看的态度把true改成了false,TMD成功了,正常了,可作为一名优秀的程序员必须得有刨根问底的精神啊不能对了就不管原理了啊,后来抱着愉悦的心情一番查资料,得出是同步和异步的问题,同步简单理解就是一块走,你不走LZ奉陪,我等你,而异步呢,就是可以不一块走,你不走,拉倒,我走先,这样就可以说得通了,与服务器交互分为应该是四个步骤,同步的话就是false时等获取了数据才往下执行,异步的话服务器交互的每一步都可能往下执行,所以可能在未获取服务器数据时就已经往下执行返回的结果当然不是我们想要的。

 

 看完故事,看代码,

var xhr=false;
var outMsg="";
function makeRequest(){
    if(window.XMLHttpRequest){//该对象存在表示当前浏览器是firefox,opera,safiar,IE7.0,IE8.0中的一个都有这个对象
        xhr=new XMLHttpRequest();    }
    else{
       if(window.ActiveXObject){//IE6.0,5.5中存在的是该对象
        
            try{
                xhr=new ActiveXObject("microsoft.XMLHTTP");
                }
            catch(e){}
        }
    }
    //alert(xhr);
    if(xhr){//如果获得了xml对象
        
//alert("getxhr");
        xhr.onreadystatechange=showContents;
        var url="http://localhost:8080/wxPay/code.txt";
        xhr.open("GET", url,false);//请求的方法(get post head) 文件的地址 请求是否异步也就是我们是否会等到请求完成 
        xhr.send(null);
    }
    
    return outMsg;
}
function showContents(){
    //alert(xhr.readyState+"state");
    if(xhr.readyState==4){//响应已经完全被接受
        
//alert(xhr.status);
        if(xhr.status==200){//200 表示请求的文件存在 404表示文件不存在
                 outMsg=xhr.responseText;
        }
        
        //return outMsg;
    }
    //alert(outMsg+"outMsg");
}

新手学ajax2

标签:

原文地址:http://www.cnblogs.com/xizhenghe/p/5467444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!