jQuery实现ajax的嵌套请求案例分析


Posted in jQuery onFebruary 16, 2019

本文实例讲述了jQuery实现ajax的嵌套请求。分享给大家供大家参考,具体如下:

今天看到了一个嵌套的ajax,算是长见识了。

不过看一眼就知道怎么回事了。

不是不会,就怕想不到。

//发送一个ajax请求,嵌套的ajax请求
'ajaxCall': function(url1, data1, url2, data2){
  var returnValue = '';
  $.ajax({
    type: "POST",
    url: url1,
    async: false,
    data: data1,
    success: function(data3) {
      //TODO
      //外层ajax响应成功,就再次发送ajax请求到第二个地址
      $.ajax({
        type: "POST",
        url: url2,
        data: data2,
        async: false,
        success: function(data4) {
          //TODO,对returnValue进行赋值
        }
      });
    }
  });
  return returnValue;
}

注:外层的 AJAX 和内层的 AJAX 的 async 属性都要设置为 false, 如果不这样的话, 两次请求都是异步的, 可能会导致数据获取不到, 但是也有一个弊端, 因为同步, 在异步请求时, 浏览器是锁死状态, 不能进行其他的操作。

jquery中的ajax方法参数的用法和他的含义:

1.url:

要求为String类型的参数,(默认为当前页地址)发送请求的地址。

2.type:

要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

3.timeout:

要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。

4.async:

要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。

5.cache:

要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。

6.data:

要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看processData(防止自动转换)选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2

7.dataType:

要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下:

  • xml:返回XML文档,可用JQuery处理。
  • html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。
  • script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。
  • json:返回JSON数据。
  • jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。
  • text:返回纯文本字符串。

8.beforeSend:

这个参数主要是为了在向服务器发送请求前,执行一些操作。要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。

function(XMLHttpRequest){
    this;  //调用本次ajax请求时传递的options参数
}

9.complete:

要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。

function(XMLHttpRequest, textStatus){
   this;  //调用本次ajax请求时传递的options参数
}

10.success:

要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。
(1)由服务器返回,并根据dataType参数进行处理后的数据。
(2)描述状态的字符串。

function(data, textStatus){
  //data可能是xmlDoc、jsonObj、html、text等等
  this; //调用本次ajax请求时传递的options参数
}

11.error:

要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下:

function(XMLHttpRequest, textStatus, errorThrown){
 //通常情况下textStatus和errorThrown只有其中一个包含信息
 this;  //调用本次ajax请求时传递的options参数
}

12.contentType:

要求为String类型的参数,当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。该默认值适合大多数应用场合。

13.dataFilter:

要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。

function(data, type){
    //返回处理后的数据
    return data;
}

14.dataFilter:

要求为Function类型的参数,给Ajax返回的原始数据进行预处理的函数。提供data和type两个参数。data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。

function(data, type){
    //返回处理后的数据
    return data;
}

15.global:

要求为Boolean类型的参数,默认为true。表示是否触发全局ajax事件。设置为false将不会触发全局ajax事件,ajaxStart或ajaxStop可用于控制各种ajax事件。

16.ifModified:

要求为Boolean类型的参数,默认为false。仅在服务器数据改变时获取新数据。服务器数据改变判断的依据是Last-Modified头信息。默认值是false,即忽略头信息。

17.jsonp:

要求为String类型的参数,在一个jsonp请求中重写回调函数的名字。该值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,例如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。

18.username:

要求为String类型的参数,用于响应HTTP访问认证请求的用户名。

19.password:

要求为String类型的参数,用于响应HTTP访问认证请求的密码。

20.processData

要求为Boolean类型的参数,默认为true。默认情况下,发送的数据将被转换为对象(从技术角度来讲并非字符串)以配合默认内容类型"application/x-www-form-urlencoded"。如果要发送DOM树信息或者其他不希望转换的信息,请设置为false。

21.scriptCharset:

要求为String类型的参数,只有当请求时dataType为"jsonp"或者"script",并且type是GET时才会用于强制修改字符集(charset)。通常在本地和远程的内容编码不同时使用。

PS:

今天在看 jQuery1.5时,看到了这个$.when(), 使用这个就能解决上面的浏览器锁死状态.

放上两个链接:

延迟对象的用法

var ajax1= $.ajax({
   url: url1,
   data: data1
  });
var ajax2= $.ajax({
   url: url2',
   data: data
  });
var ajax3= $.ajax({
   url: url3,
   data: data
  });
$.when(ajax1,ajax2,ajax3)
  .done(function(data, textStatus, jqXHR){
     //TODO
   })
  .fail(function(data, textStatus, jqXHR){
     //TODO
   });

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
jQuery正则验证注册页面经典实例
Jun 10 jQuery
jQuery、layer实现弹出层的打开、关闭功能
Jun 28 jQuery
基于jquery实现多选下拉列表
Aug 02 jQuery
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
jquery手机触屏滑动拼音字母城市选择器的实例代码
Dec 11 jQuery
使用jQuery 操作table 完成单元格合并的实例
Dec 27 jQuery
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
jQuery点击页面其他部分隐藏下拉菜单功能
Nov 27 jQuery
Jquery获取radio选中值实例总结
Jan 17 jQuery
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
基于jquery ajax的多文件上传进度条过程解析
Sep 11 jQuery
jQuery实现简单的Ajax调用功能示例
Feb 15 #jQuery
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 #jQuery
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 #jQuery
Jquery实现无缝向上循环滚动列表的特效
Feb 13 #jQuery
jquery无缝图片轮播组件封装
Nov 25 #jQuery
详解如何使用webpack打包多页jquery项目
Feb 01 #jQuery
JQuery中queue方法用法示例
Jan 31 #jQuery
You might like
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
Jquery仿淘宝京东多条件筛选可自行结合ajax加载示例
2013/08/28 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
python比较2个xml内容的方法
2015/05/11 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
python实现八大排序算法(1)
2017/09/14 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
如何使用python进行pdf文件分割
2019/11/11 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
投标服务承诺书
2014/05/28 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
董事长助理岗位职责
2015/02/11 职场文书
辛亥革命观后感
2015/06/02 职场文书