ajax defer,Ajax 运用 Deferred异步处理

这篇博客介绍了如何使用AJAX进行异步数据请求,并展示了两种处理方式。第一种是传统的.done()方法,第二种是使用$.when()进行多请求同步处理。示例代码演示了如何在接收到数据后动态加载图片,同时讨论了请求失败的处理。文章强调了$.when()在管理多个异步请求时的优势,确保了返回结果的顺序与请求顺序一致。
摘要由CSDN通过智能技术生成

/**

*important 异步执行 参数方法

*参数 url1 请求目标url, paraObj 要传递的参数对象, fun 一个用于回调的function(){}

*当请求成功后 会执行fun

**/

function ajaxDeferred(url1,paraObj,fun){

$.ajax({

url:url1,

type:'post',

dataType:'html',

data:paraObj

}).done(function(data){

fun(data);

}).fail(function(msg){

console.info(msg.status)

});

}

下面这样也一样,不过前者更新进一点

function ajaxDeferred(url1,paraObj,fun){

$.ajax({

url:url1,

type:'post',

dataType:'html',

data:paraObj,

success:function(data){

fun(data);

},

error:function(msg){

console.info(msg.status);

}

})

}

Demo 例子

HTML:

bx_loader.gif

CSS:

#testdiv{

width:1000px;

border:5px solid #ddd;

}

#testdiv img{

width:100%;

height:100px;

width:100px;

boxshadow:5px 10px 20px #333;

float:left;

margin:10px;

}

$(document).ready(function(){

loadData();

});

function loadData(){

var mydata={

"loadtype":"get_rongyu"

}

ajaxDeferred('clientEvents.asp',mydata,setData);

}

var images,i;

function setData(data){

if(data!=""){

images = data.split(",");

i = 0;

var id = setInterval(function(){

if(i

$("#clear").before("%22+images%5Bi%5D+%22");

else{

clearInterval(id);

$("#testdiv").children().first().remove();

}

i++;

},500)

}

}

function ajaxDeferred(url1,paraObj,fun){

$.ajax({

url:url1,

type:'post',

dataType:'html',

data:paraObj

}).done(function(data){

fun(data);

}).fail(function(msg){

console.info(msg.status)

});

}

本例子 请求的页面返回的是 一个字符串

“图片路径1,图片路径2”

功能是在一个div框中每隔0.5秒添加一个图片

ajax dataType 为 'HTML’ 需要改Json 就改Json

还有一种用法 使用$.when()

function ajaxDeferred(url1,paraObj){

var a = $.ajax({

url:url1,//请求地址

type:'post',//请求类型get/post

dataType:'json',//此处可是json

data:paraObj//请求数据一个数据对象 obj{"a":”1”,"b":”2”}

});

return a;

}

$.when(

ajaxDeferred("test1.html",{str:"test1"}),

ajaxDeferred("test2.html",{str:"test2"})

).done(function(data1,data2){//请求成功时执行

setXXData(data1,data2);//使用数据

}).fail(function(msg){//请求失败时执行

console.info(msg.status)

}).always(function(){//不管请求是否完成都会执行

alert("失败或错误后执行");

}).then(function(doneResult1,doneResult2){//此处参数为done中的data1,data2

alert("成功时执行");

},function(failResult){//支持三个参数jqXHR, textStatus, errorThrown

alert("错误时执行");

});

执行以上代码,两次请求只做一次处理当then()中只有一个回调方法,实质跟done()一样的功能,第二个方法为fail()

使用这种方式请求,多个异步请求就不会担心顺序问题,返回结果的顺序和请求顺序是一致的.若有问题查看缓存设置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值