天天看点

ajax 请求_【JavaScript 】Ajax网络请求

ajax 请求_【JavaScript 】Ajax网络请求

概述

什么是AJAX?

  • AJAX = 异步 JavaScript 和 XML。
  • AJAX 是一种用于创建快速动态网页的技术。
  • AJAX 不是新的编程语言,而是一种使用现有标准的新方法。 
  • AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。 
  • AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。

工作原理:

ajax 请求_【JavaScript 】Ajax网络请求

AJAX是基于现有的Internet标准 

  • AJAX是基于现有的Internet标准,并且联合使用它们:
  • XMLHttpRequest 对象 (异步的与服务器交换数据) 
  • JavaScript/DOM (信息显示/交互)
  • CSS (给数据定义样式) 
  • XML (作为转换数据的格式)
  • AJAX应用程序与浏览器和平台无关的!

创建 XMLHttpRequest 对象

语法:

variable=new XMLHttpRequest();
           

老旧版本:

variable=new ActiveXObject("Microsoft.XMLHTTP");
           

象服务器发送请求

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();
           

说明:

open(method,url,async)
规定请求的类型、URL 以及是否异步处理请求。
    method:请求的类型;GET 或 POST
    url:文件在服务器上的位置
    async:true(异步)或 false(同步)

send(string)
将请求发送到服务器,string:仅用于 POST 请求
           

GET 还是 POST?

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。然而,在以下情况中,请使用 POST 请求: 

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

示例:

//一个简单的 GET 请求:
xmlhttp.open("GET","/ajax/demo_get",true);
xmlhttp.send();

//一个简单 POST 请求:
xmlhttp.open("POST","/ajax/demo_post",true);
xmlhttp.send();
           

如果需要像 HTML 表单那样 POST 数据,可以使用 setRequestHeader() 来添加 HTTP 头。

然后在 send() 方法中发送数据:

xmlhttp.open("POST","/ajax/demo_post",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");
           

说明:

setRequestHeader(header,value)
向请求添加 HTTP 头。
    header: 规定头的名称
    value: 规定头的值
           

open() 方法的 url 参数也可以是服务器上文件的地址,该文件可以是任何类型的文件,比如 .txt 和 .xml,或者服务器脚本文件。

异步 - True 或 False?

AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。 

XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为 true:

xmlhttp.open("GET","ajax_test.html",true);
           

服务器响应

获得来自服务器的响应,可使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

responseText   获得字符串形式的响应数据。
responseXML 获得XML形式的响应数据。
           

示例-文本json:

<html><head><meta charset="utf-8"><script>function loadXMLDoc(){var xmlhttp;if (window.XMLHttpRequest)
            {// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
                xmlhttp=new XMLHttpRequest();
            }else
            {// IE6, IE5 浏览器执行代码
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET","http://wthrcdn.etouch.cn/weather_mini?citykey=101280101",true);
            xmlhttp.send();
        }script>head><body><div id="myDiv"><h2>使用 AJAX 修改该文本内容h2>div><button type="button" onclick="loadXMLDoc()">修改内容button>body>html>
           

运行,点击按钮后效果:

ajax 请求_【JavaScript 】Ajax网络请求

示例-XML对象进行解析:

<html><head><meta charset="utf-8"><script>function loadXMLDoc(){var xmlhttp;var txt,x,i;if (window.XMLHttpRequest)
  {// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
  }else
  {// IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      xmlDoc=xmlhttp.responseXML;
      txt="";
      x=xmlDoc.getElementsByTagName("ARTIST");for (i=0;i      {
        txt=txt + x[i].childNodes[0].nodeValue + "
";
      }document.getElementById("myDiv").innerHTML=txt;
    }
  }
  xmlhttp.open("GET","cd_catalog.xml",true);
  xmlhttp.send();
}script>head><body><h2>我收藏的 CD :h2><div id="myDiv">div><button type="button" onclick="loadXMLDoc()">获取我的 CDbutton>body>html>
           

效果:

ajax 请求_【JavaScript 】Ajax网络请求

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。

onreadystatechange   
存储函数(或函数名),每当readyState 属性改变时,就会调用该函数。

readyState 
存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪

status 
200: "OK"
404: 未找到页面
           

示例:

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
      document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
           

使用回调函数

function myFunction(){
    loadXMLDoc("/ajax/ajax_info.txt",function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    });
}
           

ajax.js网络请求封装示例

function ajax(url, fnSucc, fnFaild){
  //1.创建Ajax对象
  var oAjax=null;
  
  if(window.XMLHttpRequest)
  {
    oAjax=new XMLHttpRequest();
  }
  else
  {
    oAjax=new ActiveXObject("Microsoft.XMLHTTP");
  }
  
  //2.连接服务器
  oAjax.open('GET', url, true);
  
  //3.发送请求
  oAjax.send();
  
  //4.接收服务器的返回
  oAjax.onreadystatechange=function (){
    if(oAjax.readyState==4) //完成
    {
      if(oAjax.status==200) //成功
      {
        fnSucc(oAjax.responseText);
      }
      else
      {
        if(fnFaild)
          fnFaild(oAjax.status);
      }
    }
  };
}
           

示例:

<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档title><script src="ajax.js">script><script>window.onload=function (){var oBtn=document.getElementById('btn1');
  oBtn.onclick=function (){
    ajax('data.json', function (str){var arr=eval(str);
      alert(arr[0].b);
    });
  };
};script>head><body>
读取服务器上的一个文件,文件里面放了一个json<br /><input id="btn1" type="button" value="读取json" />body>html>
           

  码上加油站

  一起来加油

长按扫码关注

ajax 请求_【JavaScript 】Ajax网络请求

点“在看”你懂得

ajax 请求_【JavaScript 】Ajax网络请求

继续阅读