专栏首页EdisonTalk锋利的JQuery学习笔记之JQuery-Ajax的应用

锋利的JQuery学习笔记之JQuery-Ajax的应用

  今天终于看到了最令我兴奋的一章:JQuery与Ajax的应用。AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式应用的网页开发技术。在最初学习Ajax的日子里,我被ASP.NET AJAX框架提供的UpdatePanel迷惑了,以后Ajax就这么简单,所以在最初做的几个项目里,前台代码里必至少有一个UpdatePanel区域,把要局部刷新的内容全放到这个Panel里面,殊不知一个UpdatePanel只适合于局域网的内部信息系统,不适合在前台互联网中使用,这样效率很低。

  于是,我带着好奇的心情观看了itcast杨中科老师的2010版视频第13季Ajax,明白了应该是从XMLHttpRequest对象开始学起,它是Ajax的核心内容,也是实现的关键-发送异步请求、接收响应以及执行回调都是通过它来完成的。Ajax最大的优势就在于:1.不需要插件的支持,可以被绝大多数浏览器所支持;2.优秀的用户体验,使得Web应用程序能够更为迅速的回应用户的操作;3.提高Web程序的性能,即通过XMLHttpRequest按需发送;4.减轻服务器和宽带的负担,即在客户端和服务器端增加了一个中间层,使用户操作与服务器响应异步化;金无赤金,人无完人,Ajax也是如此,那么Ajax的不足在哪里呢?这个问题在去年秋季的中软国际校园招聘上被技术面试官问到过,我当时顿时没想起来,失误啊。Ajax主要有以下几点不足:1.浏览器对XMLHttpRequest对象的支持度不足!!2.破坏浏览器“前进”、“后退”按钮的正常功能;3.对搜索引擎支持的不足;4.开发和调试工具的缺乏;

  下面看一段最经典的实现Ajax的js脚本代码:

<script language="javascript" type="text/javascript"> //通过这个函数来异步获取信息 function Ajax(){  var xmlHttpReq = null; //声明一个空对象用来装入XMLHttpRequest  if (window.ActiveXObject){//IE5 IE6是以ActiveXObject的方式引入XMLHttpRequest的   xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");  }  else if (window.XMLHttpRequest){//除IE5 IE6 以外的浏览器XMLHttpRequest是window的子对象   xmlHttpReq = new XMLHttpRequest();//实例化一个XMLHttpRequest  }  if(xmlHttpReq != null){ //如果对象实例化成功   xmlHttpReq.open("GET","test.ashx",true); //调用open()方法并采用异步方式   xmlHttpReq.onreadystatechange=RequestCallBack; //设置回调函数   xmlHttpReq.send(null); //因为使用get方式提交,所以可以使用null参调用  }  function RequestCallBack(){//一旦readyState值改变,将会调用这个函数   if(xmlHttpReq.readyState == 4){     if(xmlHttpReq.status == 200){      //将xmlHttpReq.responseText的值赋给ID为 resText 的元素      document.getElementById("resText").innerHTML = xmlHttpReq.responseText;     }   }  } } </script>

这里test.ashx里面只有一句context.Response.Write("Hello World!");

  幸运的是,我们强大的JQuery库为我们封装了许多Ajax操作,在JQuery中$.ajax()属于最底层的方法,第2层则是load,get,post方法,第3层是getScript和getJSON方法。于是,如果我们可以实现一个极其简单的AJAX获取评论的功能:

  $(function() {             $("#send").click(function() {                 $("#resText").load("test.htm");             });         });

      通过设置id为send的按钮点击事件,在id为resText的div中加载test.htm里面的评论信息,简单的一行代码就实现了ajax效果,太方便了!!至于get和post方法,更是封装的非常好,指定服务页面,提供参数,获取返回数据,三位一体。

  在这里碰到了一些问题,学习了下JSON,JSON文件非常简洁,容易阅读。参考一篇博文:http://www.cnblogs.com/zhaozhan/archive/2011/01/09/1931340.html,这里面主要讲了在ASP.NET中JSON的序列化与反序列化。

  $.ajax()方法是最底层的Ajax实现,它可以代替load,get,post,getScript和getJson这些方法,但是要使用$.ajax()方法需熟悉一些常用的参数,例如url,type,timeout,data等,不如上面两层的方法方便,但毕竟是最底层的实现,效率上应该高一点。于是,就写下了如下的代码:

    $(function() {             $("#send").click(function() {                 $.ajax({                     type: "GET",                     url: "../App_Themes/default/js/test.json",                     dataType: "json",                     success: function(data) {                         $('#resText').empty();                         var html = '';                         $.each(data, function(commentIndex, comment) {                             html += '<div class="comment"><h6>' + comment['username'] + ':</h6><p class="para">' + comment['content'] + '</p></div>';                         })                         $('#resText').html(html);                     }                 });             });         });

  当需要传递的form里面的参数较多时,就可以使用serialize()序列化方法,一个很实用的方法。即使在表单中增加多个字段,脚本仍然能够使用,并且不需要做其他多余的工作。于是,我可以写下如下的代码:

  $(function() {             $("#send").click(function() {                 $.get("jqajax-test-2.ashx", $("#form1").serialize(), function(data, textStatus) {                     $("#resText").html(data);                 });             });             $("#loading").ajaxStart(function() {                 $(this).show();             }).ajaxStop(function() {                 $(this).hide();             });         });

  最后,作者给出了一个实例:Ajax聊天室,用PHP+MySql写的,于是我将其改成了ASP.NET+MSSQL版。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Hybrid App移动应用开发初探

      Native App(原生App)是用原生语言(Object-C/Java/C#/....)开发,用户需要下载安装的手机应用。

    Edison Zhou
  • ASP.NET Core on K8S深入学习(3-1)Deployment

    上一篇《部署过程解析与安装Dashboard》中我们了解K8S的部署过程,这一篇我们来了解一下K8S为我们提供的几种应用运行方式:Deployment、Daem...

    Edison Zhou
  • 管理 |《技术管理案例课》学习总结(下)

    所谓二线经理,就是管理一线TL或经理的经理,也就是手下管的是Leader而不是一线员工。

    Edison Zhou
  • Python向上取整,向下取整以及四舍五入函数

    hankleo
  • SQL Server AlwaysOn 日志收缩

      当前好多项目都在逐渐的采用SQL Server AlwaysOn架构来作为数据库的高可用集群技术。

    SuperDream
  • 1000道Python题库系列分享14(1道代码阅读题)

    本期题目:阅读下面的代码,分析其功能,并指出可能存在的错误及其原因,最好能够给出解决方案。

    Python小屋屋主
  • 实验二 Python语言基础实验

    2、掌握Python语言的数据类型、运算符、常量、变量、表达式和常用语句等基础知识。

    背雷管的小青年
  • 函数基础,函数返回值,函数调用的3中方式,形参与实参

    在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,意味着调用时也必须传入参数。

    小小咸鱼YwY
  • Elasticsearch 入门: _bulk 批量导入数据

    王兵
  • Python 中的元类到底是什么?这篇恐怕是最清楚的了

    在理解元类之前,您需要掌握 Python 的类。Python 从 Smalltalk 语言中借用了一个非常特殊的类概念。

    BigYoung小站

扫码关注云+社区

领取腾讯云代金券