Ajax的简述:

AJAX是什么呐?


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

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。是一种用于创建快速动态网页的技术。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

我们在学习AJAX之前要具有哪些基础呢


HTML / XHTML
CSS
JavaScript / DOM

AJAX是基于现有的Internet标准
AJAX是基于现有的Internet标准,并且联合使用它们:


XMLHttpRequest 对象 (异步的与服务器交换数据)
JavaScript/DOM (信息显示/交互)
CSS (给数据定义样式)
XML (作为转换数据的格式)

XMLHttpRequest 是 AJAX 的基础,下面我们看看它是如何创建的:

浏览器中分老版本和新版本,之中所创建的XMLHttpRequest对象不一样。老版本所指IE5

和IE5,新版本所指现代浏览器IE7+、Firefox、Chrome、Safari 以及 Opera

老版本创建 XMLHttpRequest 对象的语法:

variable=new XMLHttpRequest();

新版本创建 XMLHttpRequest 对象的语法:

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

这样说来如果我们不知道用何种浏览器打开时,要如何操作呢?

var xmlhttp;

if (window.XMLHttpRequest)

{ // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest();

} else {

// IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

我们学习前面已经知道,XMLHttpRequest 对象用于和服务器交换数据。

那么它如何向服务器发送请求呢?

发送请求我们需要用到XMLHttpRequest 对象的open()和send()方法。

xmlhttp.open(method,url,async);   eg:xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();    将请求发送到服务器。

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)

下面又来个问题,我们什么时候用GET什么时候用POST呢?它们有什么区别,如何用它们

与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。

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

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

如果你希望通过GET方法发送对象,请向url添加信息:

xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);

xmlhttp.send();

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:

xmlhttp.open("POST","/try/ajax/demo_post2.php",true);

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");

向请求添加 HTTP 头。

  • header: 规定头的名称
  • value: 规定头的值

xmlhttp.send("fname=Henry&lname=Ford");

true异步false同步的用法:

当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数:

实例

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState==4 && xmlhttp.status==200)

{ document.getElementById("myDiv").innerHTML=xmlhttp.responseText; }

}

xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);

xmlhttp.send();

当使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:

xmlhttp.open("GET","/try/ajax/ajax_info.txt",false); xmlhttp.send(); document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

如需获取来自服务器端的使用,怎么获取?

获取方式有

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

eg:document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

上面代码我们又提到onreadystatechange事件,现在我们来具体解释一下:

当请求被发送到服务器时,我们需要执行一些基于响应的任务。

每当 readyState 改变时,就会触发 onreadystatechange 事件。

readyState 属性存有 XMLHttpRequest 的状态信息。

下面是 XMLHttpRequest 对象的三个重要的属性:

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

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

  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪
status 200: "OK"
404: 未找到页面

当 readyState 等于 4 且状态为 200 时,表示响应已就绪:

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState==4 && xmlhttp.status==200) {

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

学习玩这些之后我们来看看一个实例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function showHint(str)
{
  var xmlhttp;
  if (str.length==0)
  { 
    document.getElementById("txtHint").innerHTML="";
    return;
  }
  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("txtHint").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","/try/ajax/gethint.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<h3>在输入框中尝试输入字母 a:</h3>
<form action=""> 
输入姓名: <input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>提示信息: <span id="txtHint"></span></p> 

</body>
</html>

当然运行还需要gethint.php文件

好啦,咋们的AJAX入门基本上就这样,深入的小伙伴们查阅更多资料~~~~~

猜你喜欢

转载自blog.csdn.net/mumu1998/article/details/82892461