什么是AJAX?

[亡魂溺海] 提交于 2021-02-10 06:33:33

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

 

AJAX =  异步 JavaScript XML

通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。

 

AJAX isnot a programming language.

It is justa technique for creating better and more interactive web applications.

 

XMLHttpRequest AJAX 的基础。

所有现代浏览器均支持 XMLHttpRequest 对象(IE5IE6 使用 ActiveXObject)。

XMLHttpRequest 用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。当你的页面全部加载完毕后,客户端会通过 XMLHttpRequest对象向服务器请求数据,服务器端接受数据并处理后,向客户端反馈数据。

 

创建XMLHttpRequest 对象

所有现代浏览器(IE7+FirefoxChromeSafari以及Opera)均内建 XMLHttpRequest 对象。

variable=newXMLHttpRequest();

 

XMLHttpRequest 对象用于和服务器交换数据。

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

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

 

Google Suggest

2005 年,Google 通过其Google Suggest 使 AJAX 变得流行起来。

GoogleSuggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。

 

AJAX的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。

 

<!DOCTYPEhtml>

<html>

<head>

<metacharset="utf-8">

<script>

functionloadXMLDoc()

{

varxmlhttp;

if(window.XMLHttpRequest)

  {// code for IE7+, Firefox, Chrome, Opera,Safari

 xmlhttp=new XMLHttpRequest(); //创建XMLHttpRequest对象

  }

else

  {// code for IE6, IE5老版本的 Internet Explorer IE5 IE6)使用 ActiveX 对象

  xmlhttp=newActiveXObject("Microsoft.XMLHTTP");

  }

 

//由于 HTTP 响应是由服务端发出的,并且服务器做出响应需要时间(比如网速慢等原因),所以我们需要监听服务器响应的状态,然后才能进行处理。当发送一个请求后,客户端需要确定这个请求什么时候会完成,因此,XMLHttpRequest对象提供了 onreadystatechange

//事件机制来捕获请求的状态,继而实现响应。

xmlhttp.onreadystatechange=function()

  {

//对于 responseText 属性,只有当 readyState 属性值变为4时,responseText 属性才可用,因为这表明AJAX请求已经结束!

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

    {

//如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText responseXML 属性。

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

    }

  }

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

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

xmlhttp.send();

}

</script>

</head>

<body>

 

<div id="myDiv"><h2>使用 AJAX 修改该文本内容</h2></div>

<button type="button"onclick="loadXMLDoc()">修改内容</button>

 

</body>

</html>


AjaxPHP

<!DOCTYPEhtml>

<html>

<head>

<metacharset="utf-8">

<script>

functionshowHint(str)

{

varxmlhttp;

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

//如果输入框不为空,showHint() 函数执行以下任务:

    创建 XMLHttpRequest 对象

    当服务器响应就绪时执行函数

    把请求发送到服务器上的文件

    请注意我们向 URL 添加了一个参数 q (带有输入框的内容)

 

if(str.length==0)

  {

 document.getElementById("txtHint").innerHTML="";

  return;

  }

if(window.XMLHttpRequest)

  {// code for IE7+, Firefox, Chrome, Opera,Safari

  xmlhttp=new XMLHttpRequest();

  }

else

  {// code for IE6, IE5

  xmlhttp=newActiveXObject("Microsoft.XMLHTTP");

  }

xmlhttp.onreadystatechange=function()

  {

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

    {

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

    }

  }

//由上面的 JavaScript 调用的服务器页面是 PHP 文件,名为"gethint.php"

xmlhttp.open("GET","/statics/demosource/gethint.php?q="+str,true);

xmlhttp.send();

}

</script>

</head>

<body>

 

<h3>Starttyping a name in the input field below:</h3>

<formaction="">

//当用户在上面的输入框中键入字符时,会执行函数 "showHint()" 。该函数由 "onkeyup" 事件触发:   

First name:<input type="text" id="txt1"onkeyup="showHint(this.value)" />

</form>

<p>Suggestions:<span id="txtHint"></span></p>

 

</body>

</html>

 

ajax提交表单分为两种:

1、无返回结果的,就是把表单数据直接提交给后台,让后台直接处理;

最简单的就是$(#formid).submit();直接将form表单提交到后台。

2、返回有结果的,这种情况下,后台不管是执行成功还是失败,最终的信息都需要返回到前台。

第二种是使用最多的一种,因为程序的执行成功与否都需要给用户提示,程序一般也都是多步完成的,执行完插入操作,需要发起流程,这就需要在界面上判断成功与否。ajax本身属于有返回结果的一类,其中的success方法就是处理后台返回结果的。

 

ajax提交表单有返回结果的有两种实现方式:

1、将form表单数据序列化

<span style="font-size:18px;">  $.ajax({ 
    type: "POST",  
    url:your-url,  
   data:$('#yourformid').serialize(), 
    async: false,  
    error: function(request) {  
        alert("Connectionerror"); 
    }, 
    success: function(data) {  
        //接收后台返回的结果 
    } 

  });</span> 

需要注意的是,使用这种方法的前提是form表单中的项一定要有name属性,后台获取的键值对为key=name值,value=各项值。

注意:无论是input标签还是span标签或者其他标签,一定要有name属性,没有name属性后台是获取不到该项的。

2、通过窗口查找form提交

<span style="font-size:18px;">  // 提交表单 
  var obj =document.getElementById("xx_iframe").contentWindow; 

  obj.$("#yourform").form("submit",{ 
    success :function(data){  
        //对结果处理 
    }   

  });</span>

因为在当前界面上弹出对话框,然后在对话框上的按钮触发对话框中表单提交,对话框又是链接的另外的html页面,如此通过$(#formid)的方式是找不到对话框中的form的,因此这种情况下只能使用这种方式提交表单。

另外ajax中封装的get,post请求也都属于有返回结果的一类。

 

总的来说,无返回结果的和有返回结果的(form表单数据序列化+通过窗口实现form提交)form表单都必须要有name属性。

 

jQuery中,Ajax常见的请求方式主要有一下4种:

 

1$.ajax()返回其创建的 XMLHttpRequest 对象。

$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。

如果你指定了dataType选项,那么需要保证服务器返回正确的MIME信息,( xml 返回 "text/xml")

实例:

保存数据到服务器,成功时显示信息。 

$.ajax({
type: "post",
dataType: "html",
url: '/Resources/GetList.ashx',
data: dataurl,
success: function (data) {
if (data != "") {
$("#pager").pager({ pagenumber: pagenumber, pagecount:data.split("$")[1], buttonClickCallback: PageClick});
$("#anhtml").html(data.split("$")[0]);
}
}
});

 

2.通过远程 HTTP GET 请求载入信息。

相比于复杂的$.ajax而言,GET请求功能则显得更加简单,请求成功时可调用回调函数。当然如果需要在出错时执行函数,那么还请使用$.ajax

实例:

$.get("test.cgi", { name: "John", time:"2pm" },
function(data){
alert("Data Loaded: " + data);
});

 

3. 通过远程 HTTP POST 请求载入信息。

POST请求功能也相对比较简单,请求成功时可调用回调函数。如果需要在出错时执行函数,那么请使用 $.ajax请求。

实例:

$.post("/Resources/addfriend.ashx", { "fid":fids, "fname": fnames, "tuid": tuids, "tuname":tunames }, function (data) {
if (data == "ok") {
alert("添加成功!");
}
})

 

4.通过 HTTP GET 请求载入 JSON 数据。

实例:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items,function(i,item){
$("<img/>").attr("src",item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});

 

 

 

 


本文分享自微信公众号 - PM吃瓜(wu_lian_club)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!