jQuery-Ajax(详解)_jquery.ajax-程序员宅基地

技术标签: jQuery  HTML5  ajax  jquery  

安装Web环境

Ajax方法需要与Web服务器端进行交互,需要有环境才可正常使用,安装环境的工具包有很多,可以选择自行下载。

jQuery中的Ajax

在jQuery中,$.ajax()方法属于最底层的方法,第2层是load(),$.get(),和$.post(),第3层是$.getScript()和$.getJSON()方法。

一、 load( ) 方法

结构
load( url , [data] , [callback] )

参数解释

捕获.PNG

1.1 应用

1.1.1首先构建一个被load()方法加载并追加到HTML文件,名字为xi.html,html代码如下:

 

<ul>
    <li>《慢慢来,一切都来得及》</li>
    <li>《你的孤独虽败犹荣》</li>
    <li>《你只是看上去很努力》</li>
    <li>《JavaScript从入门到放弃》</li>
</ul>
<div>你筛选出来的元素</div>

1.1.2然后再新建一个空白页面,用来追加的HTML内容,HTML代码如下:

 

<h3>你最喜欢读什么书?</h3>
<p id="cont"></p>
<button>点击</button>

1.1.3接下来就是编写Jquery代码了,等DOM加载完毕之后,通过单击按钮来调用load()方法,然后将xi.html的内容加载到id=“cont”的元素里。
jQuery代码如下:

 

$("button").click(function(){
    $("#cont").load("xi.html")//单击时将xi.html的内容加载到页面上
    })
})

运行结果:

GIF.gif

1.2筛选载入的HTML文档

上面的例子是将xi.html页面中的内容都加载到id为“cont”的元素里,如果只要加载页面内的某些内容,可以使用load(URL selector)方法的URL参数来达到目的。

注意:URL和选择器之间有一个空格。

例如只需要加载xi.html的li元素中内容,可以使用如下代码:

 

$("button").click(function(){
    $("#cont").load("xi.html li");
})

运行结果:

GIF.gif

1.3传递方式

load()方法传递方式根据参数data来自动指定。如果没有参数传递,则采用get方式,反之,则自动转换为post方式。

 

$("button").click(function(){
    $("#cont").load("xi.html li",{name:"rain",age"18"},function(){
   //code....
  });
})

1.4 回调参数

对于必须在加载完成后才能继续的操作,load()方法提供了回调函数(callback),该函数有3个参数,分别代表“请求返回的内容”,“请求状态”,“XMLHttpRequest对象”,代码如下:

 

$("#cont").load("xi.html li",function(responseText,textStates,XMLHttpRequest){
   //responseText:请求返回的内容
   //textStates:请求状态:success   error  notmodified  timeout4种
   //XMLHttpRequest:XMLHttpRequest对象
  });

注意:在load()方法中,无论Ajax请求是否成功,只要请求完成。回调函数就被触发。

二、 $.get( ) 方法和$.post()方法

load()通常是从web服务器上获取静态的数据文件,如果需要专递一些参数给服务器中的页面,可以使用 $.get( ) 方法和$.post()方法(或$.ajax()方法)

2.1 $.get( ) 方法

结构
$.get( url,[ data ],[ callback ],[ type ])
参数解释

捕获.PNG

 

2.1.1 应用

下面是一段评论页面的HTML代码,通过该段代码来介绍$.get()方法的使用。

 

<p><h3>评论</h3></p>
<p>姓名:<input type="text" name="" id="name"></p>
<p>内容:<textarea id="cont"></textarea></p>
<button>发表留言</button>
<hr>
<h3>已有评论</h3>
<div id="msg"></div> 

该段代码生成的页面

捕获.PNG

 

将姓名和内容填写好后,就可以提交评论了。

确定请求的URl地址
$("button").click(function(){$.get("get_html.php",data参数,回调函数})
提交之前,将姓名和内容的值作为参数data传递给后台

 

$("button").click(function(){$.get("get_html.php",
   {"username":$("#name").val(),"content":$("#cont").val()},
   回调函数)
})

如果服务器结构到传递的data数据并成功返回,那么就可以通过回调函数将返回的数据显示到页面上
$.get()方法的回调函数只有两个参数,

 

function(){
  //data:返回的内容,可以是XML文档,json文件,XHML片段等等
  //textStatus:请求状态:success  error  notmodified timeout4种
}

data参数代表请求返回的内容,textStatus参数代表请求状态,而且回调含税只有当数据成功(success)后才能被调用

 

$("button").click(function(){$.get("get_html.php",{"username":$("#name").val(),"content":$("#cont").val()},function(data,textStatus,fn){
        if(textStatus=="success"){
            $(data).appendTo("#msg")
        }
    },
    "html"
    );
})

运行结果

GIF.gif

2.2 $.post( ) 方法

它与$.get( )方法的结构和使用方式都相同,不过之间仍然有一下区别

2.2.1get与post区别

1.post的安全性高于get;如果以get方式请求,请求参数会拼接到url后面,安全性性低,以post方式请求,请求参数会包裹在请求体中,安全性更高

2.数量区别:get方式传输的数据量小,规定不能超过2kb,post方式请求数据量大,没有限制。

3.传输速度:get的传输速度高于post

因为使用方法相同,因此只要改变jQuery函数,就可以将程序在GET请求和POST请求之间切换

 

$("button").click(function(){$.post("get_html.php",{"username":$("#name").val(),"content":$("#cont").val()},
   function(data,textStatus,fn){
        if(textStatus=="success"){
            $(data).appendTo("#msg")
        }
    },
    "html"
    );
})

运行结果和GET一样。

三、 $.getScript( ) 方法和$.getJson()方法

3.1 $.getScript( )方法

有时候,在页面出息加载时就获取所需的全部JavaScript文件是完全没有必要的,可以在需要的时候直接加载。jQuery提供了 $.getScript( )方法来直接加载js文件,与加载一个HTML片段一样简单方便,并且不需要对JavaScript文件进行处理,JavaScript文件会自动执行。

3.1.1结构
$.getScript( url , fn )
url:请求地址
fn:回调函数

3.2.1应用
新建一个basejs.js文件,随机生成颜色的函数,代码如下

 

function randomColor(){
    var str="0123456789abcdef";
    var color = "#";
    for (var i = 0; i < 6; i++) {
        color+=str[ Math.floor( Math.random()*str.length)];
    };
    return color;
}

当我们点击按钮时加载js文件,给body添加颜色
jQuery代码如下

 

$("button").click(function(){
    $.getScript("basejs.js",function(){
        $("body").click(function(){
            $(this).css("background-color",randomColor())
        })
    })
})

运行结果

GIF.gif

3.2 $.getJson( )方法

$.getJson( )方法用于加载JSON文件,与$.getScript( )方法的用法相同
$.getJSON( url,回调函数})
当点击加载时,页面上看不到任何效果,虽然函数加载了JSON文件,但是并没有告知JavaScript对返回的数据如何处理,为此,所以在回调函数里我们可以处理返回的数据
通常我们需要遍历我们得到的数据,虽然这里我们可以使用传统的for循环,但是我们也可以通过$.each(),可以用来遍历对象和数组,$.each()函数是以一个数组或者对象为第1个参数,以一个回调函数作为第2个参数,回调函数拥有两个参数,第1个为对象的成员或者数组的下标,第2个位对应变量或内容

 

$(function(){
  $("button").click(function(){
    $.getJSON( "text.json" , function( data ){
       $.each( data , function(index,comment){
         处理数据...
      }
    })
  })
})

四、 $.Ajax()方法

前面用到的$.load(),$.get(),$.post(),$.getScript(),$.getJSON()这些方法,都是基于$.ajax()方法构建的,$.ajax()是jQuery最底层的Ajax实现,因为可以用来代替前面的所有方法。

所以如果除了上面,还需要编写一下复杂的Ajax程序,那么就要用$.ajax(),$.ajax()不仅能实现与$.load(),$.get(),$.post()同样的功能,而且还可以设定beforeSend(提交前回调函数)、error(请求失败后处理)、success(请求成功后处理)、complete(请求完成后处理)回调函数,通过设定这些回调函数,可以给用户更多的Ajax提示信息,另外,还有一些参数可以设置Ajax请求的超时时间或者页面的“最后更改”状态。

$.ajax({
url:请求地址
type:"get | post | put | delete " 默认是get,
data:请求参数 {"id":"123","pwd":"123456"},
dataType:请求数据类型"html | text | json | xml | script | jsonp ",
success:function(data,dataTextStatus,jqxhr){ },//请求成功时error:function(jqxhr,textStatus,error)//请求失败时
})


$.ajax({
    url:"tom.php",
    type:"get",
    dataType:"text",
    success:function(data,textStatus,jqxhr){
        console.log("__成功__");
        console.log(data);
        console.log(textStatus);
        console.log(jqxhr);
        console.log("______");
    },
    error:function(jqxhr,textStatus,error){
        console.log("__失败__");
        console.log(error);
        console.log(textStatus);
        console.log(jqxhr);
        console.log("******");  
    
    }
})

番外篇1

以下引用《锋利的JQuery》

Ajax的优势

1、不需任何浏览器插件
不需任何浏览器插件,就可以被大多数浏览器所支持,用户只需要允许JavaScript在浏览器上执行即可。

2、优秀的用户体验。
最大的优点,能在不刷新整个页面的前提下更新数据,这使得Web应用程序能迅速回应用户的操作。

3、提高Web程序的性能
与传统模式相比,Ajax模式在性能上最大区别就是在于传输数据的方式,在传统模式中,数据提交是通过表单(from)来实现的,而数据获取的是靠全面刷新网页来说获取整页的内容,Ajax的模式只是通过XMLHttpRequest对象来向服务器端提交需要提交的数据,即按需发送。

4、减轻服务器和宽带的负担
Ajax的工作的原理相当于在用户和服务器之间加了一个中间层,是用户操作与服务器响应异步化,他在客户端创建Ajax引擎,把传统方式下的一些服务器负担的工作转移到客户端,便于客户端资源来处理,减轻服务器和宽带的负担。

Ajax的缺点

1、浏览器对XMLHttpRequest对象的支持度不足
Ajax的不足之一首先来自于浏览器,IE5.0及以后的版本才支持XMLHttpRequest对象(现阶段大部分客户端都在IE6以上),Mozilla,Netscape等浏览器支持XMLHttpRequest则更在其后,为了使得Ajax应用能在各个浏览器中正常运行,程序员必须花费大量的精力编码以兼顾各个浏览器之间的差别,来让Aajx应用能更好的兼容各个浏览器。

2、破坏浏览器前进、后退按钮的正常功能
在Ajax中,前进和后退按钮的功能都会失效,虽然可以通过一定的方法(添加锚点)来使用户可以使用前进和后退按钮,但相对于传统的方式却麻烦了很多,对于用户而言,他们经常会碰到这种状况,当点击一个按钮触发一个Ajax交互后又觉得不想这样做,接着就去习惯性的单击后退按钮,结果发生了最不愿意看到的结果,浏览器后退到先前的一个页面,通过Ajax交互得到的内容完全消失了。

3、对搜索引擎的支持不足
通常搜索引擎都是通过爬虫来对互联网上的数以亿计的海量数据进行搜索整理的,然而爬虫程序现在还不能理解那些奇怪的JavaScript代码和因此引起的页面内容的变化,这使得应用Ajax的站点在网络推广上相对于传统站点处于劣势。

4、开发和调试工具的缺乏
JavaScript是Ajax的重要组成部分,在目前,由于缺少很好的JavaScript开发和调试工具,使很多Web开发者对于JavaScript望而生畏,这对于编写Ajax代码就更加苦难了,勇士,目前许多Web开发者已经习惯使用可视化的工具,对于亲自编写代码有畏惧感,着她在一定程度上影响了大家对Ajax的应用。

番外篇2

jQuery中的Ajax全局事件

jQuery简化Ajax操作不仅体现在调用Ajax方法和处理响应方面,而且还体现在对调用Ajax方法过程中的HTTP请求的控制,通过jQuery提供的一些自定义全局函数,能够为各种与Ajax相关的事件注册回调函数。

例如
当Ajax请求时,会触发ajaxStart()方法回调函数

当Ajax请求结束时,会触发ajaxStop()方法的回调函数

这些都是全局函数,因此无论创建他们的代码位于何处,只要有Ajax请求时,就会触发他们。

比如,如果图片加载速度比较慢,可以给用户一些提示信息,常用的提示信息“加载中...”,代码如下

<div id="loading>加载中...</div>

然后用css控制元素隐藏,当Ajax请求开始的时候,用来提示用户正在进行,当Ajax请求结束后,将此元素隐藏。代码如下

$("#loading").ajaxStart(function(){
    $(this).show()
});
$("#loading").ajaxStop(function(){
    $(this).hide();
})

这样一来,在Ajax请求过程中,只要图片还未加载完,就会一直显示“加载中...”的提示信息,看似很简单的一个改进,确极大的改善用户的体验。
如果页面中还有其他地方也是用Ajax,该提示信息仍然有效,因为他是全局的。
jQuery的Ajax全局事件还有几个方法,也可以在使用Ajax方法的过程中为其带来方便。

捕获.PNG

捕获.PNG

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunshao904/article/details/106440985

智能推荐

使用iTextPdf为Pdf模板填充表单项_itextpdf pdf模版 写入表格-程序员宅基地

文章浏览阅读4k次。说明日常开发中,通常会有动态填充Pdf表单的需求,程序可根据用户的输入或后台数据库的内容,动态、批量向Pdf模板中填充内容。这里简单介绍一下Pdf模板的制作,以及通过iTextPdf组件给pdf Form表单进行内容填充。Pdf模板制作1、word中制作表格使用Office word 或 WPS word,制作出一个表格,通过表格底色,颜色、字体设置、对齐等方式美化一下表格。效果图如下:2、word导出为pdf可以使用WPS的另存为功能,将word导出为pdf文件导出完的pdf文件,效果_itextpdf pdf模版 写入表格

windows、linux下java连接本地MQ队列实现输入(二)_runmqsc qmgrname使用java连接mq-程序员宅基地

文章浏览阅读1.4k次。上一篇文章环境为windows,这一篇将说一下linux环境下java连接本地队列实现输入输出,其实大同小异,但是八戒在这里有很多心得感悟,想和大家做一分享,八戒将尽全力实现跨系统java远程访问MQ队列实现输入输出,争取下一篇文章快点出炉。(下一篇:客户端windows,服务器端linux)说到linux,不得不说的就是命令,当然八戒也希望自己将来在linux上有一些建树。哈哈~~,整理一下_runmqsc qmgrname使用java连接mq

C语言预处理命令是什么?_预处理命令必须以#开头-程序员宅基地

文章浏览阅读210次。前面各章中,已经多次使用过#include命令。使用库函数之前,应该用#include引入对应的头文件。这种以#号开头的命令称为预处理命令。C语言源文件要经过编译、链接才能生成可执行程序:1) 编译(Compile)会将源文件(.c文件)转换为目标文件。对于 VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o。编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。2) 链接(Link)是针对多个文件的,它会将编译生成的多个目标文件以及_预处理命令必须以#开头

深度学习系列之图像分类_深度学习图像分类模型-程序员宅基地

文章浏览阅读9.4k次,点赞6次,收藏40次。最近在学习深度学习相应的知识,为了巩固所学内容,打算从文本分类、图像分类等较为大众化的任务开始,并书写博客记录之,与博友共勉。本文介绍的就是使用keras框架进行图像分类(数据源mnist)的操作,下面通过几个章节分别介绍一些背景知识和具体的操作步骤。 一.数据集和使用的框架的介绍 1.keras:keras是一个深度学习框架,底层使用的是theano和ten_深度学习图像分类模型

【WPF系列】- XAML语法规范_wpf的xml语言-程序员宅基地

文章浏览阅读1.1k次,点赞15次,收藏13次。定义XAML语法术语是XAML语言规范中进行定义或引用。XAML是基于XML的语言,遵循或扩展XML结构规则。XAML是基于描述XML语言或XML文档对象模型时常用的术语。XAML是一种标记语言。CLR是可实现运行时语言。XAML不是CRL运行一部分。仅是使用于WPF的XAML时实例化运行的一种表达形式。_wpf的xml语言

Mac OpenResty安装-程序员宅基地

文章浏览阅读168次。参考网址: http://openresty.org/cn/installation.html1.安装前的准备 Mac OS X (Darwin) 用户 使用brew工具安装pcre、openssl库:brew install pcre openssl2.下载OpenResty的源码包l, 请到Download页下载   下载成功后解压o..._macos系统 安装openresty

随便推点

[架构之路-122]-《软考-系统架构设计师》-操作系统-1-操作系统原理 - 进程管理:同步VS异步、互斥VS共享、PV操作_pv 软考架构-程序员宅基地

文章浏览阅读225次。操作系统的本质就是创建一个并发的应用程序执行的环境,使得各种应用程序可以动态、共享相同的计算机物理硬件资源,计算机的三大物理资源包括:CPU内存外设应用程序(管理应用程序):以进程和现成的方式组织,所有的应用程序被抽象成了一个个的进程与现成;然后,有了进程间同步、互斥与通信、进程的优先级调度等概念。所有的外设(管理外设资源):以统一的文件来组织,所有的应用程序通过文件的方式访问所有的外设,操作系统通过把文件映射成设备的驱动程序访问外设硬件。并以中断的手段提供异步抢占的方式临时占用计算机的资源。_pv 软考架构

Swing布局管理器--CardLayout(卡片布局管理器)_swing cardlayout-程序员宅基地

文章浏览阅读1.6k次,点赞3次,收藏5次。CardLayout布局管理器CardLayout(卡片布局管理器)能够帮助用户实现多个成员共享同一个显示空间,并且一次只显示一个容器组件的内容CardLayout布局管理器将容器分为很多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个容器的大小CardLayout构造方法CardLayout():构造一个新布局,默认间隔为0CardLayout(int hgap,in..._swing cardlayout

iphone连接windows10移动热点问题_iphone连win10热点-程序员宅基地

文章浏览阅读146次。以前公司的wifi虽然做了802.1x无线接入认证,不过限制不严,采用的是账号认证,所以手机等无线设备也是可以接入的,后来采用计算机认证,只有加域的电脑才能接入,这下手机不能直接接入了,所幸电脑虽然没有管理员权限,还是可以开启移动热点,这样手机可以通过电脑接入网络,虽然跟电脑一样受上网行为约束,但是像邮件,微信,oa等还是可以使用的,总是省了下数据流量。有类似困扰的朋友,可以参考借鉴下,注意移动热点选2.4GHz,手机wifi不要限制IP地址跟踪,可能就能解决你无线设备接入win10的移动热点了。_iphone连win10热点

ubuntu12.10安装jdk1.7-程序员宅基地

文章浏览阅读866次。考完试了,要把自己答应的补回来,今天就写java jdk的安装吧因为本人命令不熟悉,而且vi也不熟,就是菜鸟一个。所以,本文安装尽量避免命令及vi的使用。首先下载官网上最新的jdk,网址:http://www.Oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html。解压到桌面,放置到deve

nexus上传jar包_nexus手动传jar-程序员宅基地

文章浏览阅读1.6k次。nexus上传自定义starter_nexus手动传jar

M1芯片Mac安装brew和brew常用命令(附:安装docker)_brew 启动docker-程序员宅基地

文章浏览阅读2.5k次。改完之后在安装上面那个安装命令就可以啦。1、卸载docker:哪种方式安装的就用哪种方式卸载 |brew uninstall docker |brew cask uninstall docker。1、安装docker:brew cask install docker |这样安装的docker将会安装在usr/local/bin目录下。1、安装docker:brew install docker |这样的安装docker将会在usr/local/Cellar目录下。_brew 启动docker

推荐文章

热门文章

相关标签