【Ajax 基础学习】

今天简单的学习了 Ajax 的基础知识,总结在这里。部分代码不是原创,特此说明。javascript

【Ajax 简介】php

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。经过在后台与服务器进行少许数据交换,AJAX 可使网页实现异步更新。这意味着能够在不从新加载整个网页的状况下,对网页的某部分进行更新。有不少使用 AJAX 的应用程序案例:新浪微博、Google 地图、开心网等等。例如当咱们在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,而后服务器会返回一个搜索建议的列表。以下图所示:java

 

XMLHttpRequest数组

首先咱们介绍 XMLHttpRequest 。XMLHttpRequest 是 AJAX 的基础。为了应对全部的现代浏览器,包括 IE5 和 IE6,在建立 XMLHttpRequest 对象以前,咱们须要检查浏览器是否支持 XMLHttpRequest 对象。若是支持,则建立 XMLHttpRequest 对象。若是不支持,则建立 ActiveXObject,代码以下:浏览器

var xmlhttp;
if(window.XMLHttpRequest){   // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else{   // code for IE6, IE5
    xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}

如需将请求发送到服务器,咱们使用 XMLHttpRequest 对象的 open() 和 send() 方法:服务器

xmlhttp.open(method,url,async);
xmlhttp.send();

这里的 open 方法有三个参数,分别是 method, url, async, 表明以下意思:异步

method :规定请求的类型,有 GET 和 POST 两种async

url :请求的服务器文件的 url 函数

async :规定是否异步处理请求,true(异步)或 false(同步)学习

如需得到来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。若是来自服务器的响应并不是 XML,请使用 responseText 属性。若是来自服务器的响应是 XML,并且须要做为 XML 对象进行解析,请使用 responseXML 属性。

当请求被发送到服务器时,咱们须要执行一些基于响应的任务。每当 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;
    }
  }

【Ajax 实例】

如今咱们建立一个相似 google 的搜索框,达到以下的效果:

 

 

 

 

 

 

咱们在搜索框内输入内容,服务器自动分析已有内容进行匹配。首先咱们建立 HTML 页面,代码以下:

<h1>请在下面的输入框内键入字母(A - Z)</h1>
<form action="">
    姓氏:<input type="text" id="txt1" onkeyup="showHint(this.value)" />
</form>
<p>建议:<span id="txtHint"></span></p>

javascript 代码以下:

//定义相应 onkeyup 的函数
function showHint(str){
    var xmlhttp;
    //若是用户输入内容为空,HTML 页面不显示任何数据
    if(str.length == 0){
        document.getElementById('txtHint').innerHTML = '';
        return;
    }
    //检查浏览器是否支持 XMLHttpRequest 对象
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }
    else{
        xmlhttp = ActiveXObject('Microsoft.XMLHTTP');
    }
    //规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数
    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
            document.getElementById('txtHint').innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.open('GET','eg22.php?q='+str,true);
    xmlhttp.send();
}

能够看到咱们在请求 eg22.php 页面的信息,相应的 PHP 页面代码以下:

<?php
// 用名字来填充数组
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";

//得到来自 URL 的 q 参数
$q=$_GET["q"];

//若是 q 大于 0,则查找数组中的全部提示
if (strlen($q) > 0)
  {
  $hint="";
  for($i=0; $i<count($a); $i++)
    {
    if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q))))
      {
      if ($hint=="")
        {
        $hint=$a[$i];
        }
      else
        {
        $hint=$hint." , ".$a[$i];
        }
      }
    }
  }

// 若是未找到提示,则把输出设置为 "no suggestion"
// 不然设置为正确的值
if ($hint == "")
  {
  $response="no suggestion";
  }
else
  {
  $response=$hint;
  }

//输出响应
echo $response;
?>

源代码解释:

若是输入框为空 (str.length==0),则该函数清空 txtHint 占位符的内容,并退出函数。

若是输入框不为空,showHint() 函数执行如下任务:

  • 建立 XMLHttpRequest 对象
  • 当服务器响应就绪时执行函数
  • 把请求发送到服务器上的文件
  • 请注意咱们向 URL 添加了一个参数 q (带有输入框的内容)

到目前为止咱们已经完成了目标工做。须要注意的一点是,若是使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面便可。

相关文章
相关标签/搜索