Ajax学习笔记

什么是Ajax?

Asynchronous JavaScript and XML

现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax。

不用刷新整个页面便可与服务器通讯的方法:

Flash

Java Applet

框架:如果使用一组框架构造了一个网页,可以之更新其中一个框架,而不惊动整个页面

隐藏的iframe

XMLHttpRequest:该对象是对JavaScript的一个扩展,可使网页与服务器进行通信。是创建Ajax应用的最佳选择。

实际上通常把Ajax当成XMLHttpRequest对象的代名词

 

Ajax的工作原理

其中,异步传输使用的对象就是XMLHttpRequest。

XMLHttpRequest封装了协议和数据,

前端可以使用JavaScript绑定和处理XMLHttpRequest数据。

Ajax的缺陷

  • 由JavaScript和Ajax引擎导致的浏览器的兼容
  • 页面局部刷新,导致后退功能失效
  • 对流媒体的支持没有flash、java applet好
  • 一些设备支持性差,如手机

XMLHttpRequest对象

不同浏览器的实现不同,但是API相同,所以可以使用同样的方式使用XMLHttpRequest对象的属性和方法。

上面Ajax的缺陷的第一点,提到了兼容性的问题,但是划了删除线,因为很多前端框架都对此作了兼容,可以直接用。但是为了更好的用框架,我们还是要知道些原理,下面看看jQuery中的封装:

// Functions to create xhrs
function createStandardXHR() {
	try {
		return new window.XMLHttpRequest();
	} catch( e ) {}
}

function createActiveXHR() {
	try {
		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
	} catch( e ) {}
}

// Create the request object
// (This is still attached to ajaxSettings for backward compatibility)
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
	/* Microsoft failed to properly
	 * implement the XMLHttpRequest in IE7 (can't request local files),
	 * so we use the ActiveXObject when it is available
	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
	 * we need a fallback.
	 */
	function() {
		return !this.isLocal && createStandardXHR() || createActiveXHR();
	} :
	// For all other browsers, use the standard XMLHttpRequest object
	createStandardXHR;

// Determine support properties
(function( xhr ) {
	jQuery.extend( jQuery.support, {
		ajax: !!xhr,
		cors: !!xhr && ( "withCredentials" in xhr )
	});
})( jQuery.ajaxSettings.xhr() );

在浏览器加载jquery.js文件时,立即执行闭包函数,传入jQuery.ajaxSettings.xhr()参数,将ajax属性注册到jQuery对象上,ajax属性值就是传入的参数,也就是jQuery.ajaxSettings.xhr()方法,该方法里面做了所谓的兼容工作:

IE7以前的浏览器,使用window.ActiveXObject作为XMLHttpRequest对象的实现,其他浏览器使用window.XMLHttpRequest作为XMLHttpRequest的实现。

XMLHttpRequest的主要方法:

open("method","url")

send(content)

setRequestHeader("header","value")

onreadystatechange,服务器触发该事件,每次readyState改变都会触发该事件

readyState

0 未初始化,open方法未调用

1 代表正在加载,open方法已被调用

2 代表已经加载完毕,send已被调用,请求已经开始

3 代表交互中,服务器正在发送响应

4 代表完成,响应完毕

responseText

responseXML

status

可以通过给url后面加上时间戳,禁用浏览器缓存

如果用POST请求发送数据,需要将Content-type的首部设置为"application/x-www-form-urlencoded"。它会告诉服务器正在发数据,并且数据已经符合URL编码了。

该方法必须在open()之后调用。

Ajax数据传输格式:

html: request.responseText

xml: request.responseXML

json: var result = request.responseText

var jsonObject = eval("(" + result + ")")

eval函数存在代码注入风险。

jQuery中的Ajax

底层方法$.ajax(),第二层是load(),$.get()和$.post(),第三层是$.getScript()和$.getJSON()。

 

load()

$("div").load(url,args);  不带参数是get请求,带参数是post请求

可以通过url selector只加载某些元素

$(function(){
    $("a").click(function(){
        var url = this.href + " h2 a";
        var args = {"time":new Date()};
        $("#details").load(url, args);
        return false;
    });
})

$.get()、$.post()、$.getJSON()使用方式都一样:

$(function(){
    $("a").click(function(){
        var url = this.href;
        var args = {"time":new Date()};

        $.getJSON(url,args,function(){
            var name = data.person.name;
            var email = data.person.email;
            var website = data.person.website;

            $("#details").empty()
                .append("<a href='"+ website+"'>" + website + "<a/>");

        });

        return false;
    });
})

 

$(function(){
    $("a").click(function(){
        var url = this.href;
        var args = {"time":new Date()};

        $.get(url,args,function(){
            var name = data.person.name;
            var email = data.person.email;
            var website = data.person.website;

            $("#details").empty()
                .append("<a href='"+ website+"'>" + website + "<a/>");

        },"JSON");

        return false;
    });
})

小结:

1、什么事Ajax?不用刷新页面,但可以和服务端进行通信的方式,使用Ajax的主要方式是XMLHttpRequest对象

2、使用XMLHttpRequest对象实现Ajax。[了解]

3、Ajax传输数据的3中方式:

XML、HTML、JSON

4、使用jQuery封装的Ajax API。[掌握]

$.ajax()、$.load()、$.get()、$.post()、

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值