Ajax异步请求

    xiaoxiao2021-03-25  98

    以前的web应用要涉及大量的页面创新:用户点击了某个链接,请求发送回服务器,然后服务器根据用户的操作再返回新页面。即使用户看到的只是页面的一小部分有变化 ,也需要刷新整个页面,这样不仅耗费响应时间而且用户体验极差。

    在2005年,Ajax诞生了,对页面的 请求以异步方式发送到服务器。而服务器不会用整个页面来响应请求,它会在后台处理请求,与此同时用户还可以继续浏览页面并与页面进行交互。你的脚本则可以按需加载和创建页面的内容,而不会打断用户的浏览体验。

    XMLHttpRequest+web服务器进行异步交换

    var request=new XMLHttpRequest(); //新建XMLHttpRequest对象 微软最早在IE5中以ActiveX对象的形式实现了一个名叫XMLHTTP的对象。在IE中创建新的对象要使用下列代码: var request=new ActiveXObject('Msxml2.XMLHTTP.3.0'); 为了兼容不同浏览器,发送请求的代码可以写成如下形式: var request; if(window.XMLHttpRequest){ request=new XMLHttpRequest(); }else{ request=new ActiveXObject('Microsoft.XMLHTTP');

    XMLHttpRequest对象有诸多属性,

    responseText   获得字符串形式的响应数据responseXML  获得XML形式的响应数据status和statusText    以数字和文本形式返回http状态码getAllResponseHeader()  获取所有的响应报头getResponseHeader()  查询响应中的某个字段的值

    浏览器在不同阶段更新readyState属性的值,它有5个可能的值:

    0表示位初始化1表示正在加载2表示加载完毕3表示正在交互4表示完成

    只要readyState的值变为4,就可以访问服务器发送回来的数据了。

    XMLHttpRequest对象有两个方法,分别是.open(method,url,async)和.send(string)

    request.open('GET','/api/categories'); //三个参数,分别为 第一个参数指定是GET还是POST,第二个参数指定URL地址, //第三个参数指定是否使用异步,默认是true,所以不用写。 //JavaScript在发送AJAX请求时,URL的域名必须和当前页面完全一致 request.send(); //也可以不填写GET  (查询,获取)

    一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般为200个字符

    POST (发送表单数据,修改,删除)

    一般用于修改服务器上的资源,对所发送的信息的数量无限制

    然而,在以下情况中,请使用 POST 请求:

    无法使用缓存文件(更新服务器上的文件或数据库)向服务器发送大量数据(POST 没有数据量限制)发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

    function success(text){ //success var textarea=document.getElementById('test-response-text'); textarea.value=text; } function fail(code){ //fail var textarea=document.getElementById('test-response-text'); textarea.value="Error Code"+code; } //新建XMLHttpRequest对象,兼容低版本IE,新建一个Microsoft.XMLHTTP对象 var request; if(window.XMLHttpRequest){ request=new XMLHttpRequest(); }else{ request=new ActiveXObject('Microsoft.XMLHTTP'); } request.onreadystatechange=function(){ //状态发生改变时,函数会回调 if(request.readyState===4){ //成功完成 //判断响应结果 if (request.status===200){ //成功,通过responseText拿到响应结果 return success(request.responseText); }else{ //失败,根据响应码判断失败原因 return fail(request.status); } }else{ //HTTP继续请求 } } request.open('GET','/api/categories'); request.send(); alert('请求已发送,请等待响应...');

    转载请注明原文地址: https://ju.6miu.com/read-3353.html

    最新回复(0)