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实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
May 09 jQuery
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
Jul 31 jQuery
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
jQuery实现动态添加和删除input框代码实例
Mar 29 jQuery
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
jquery添加div实现消息聊天框
Feb 08 jQuery
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 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
随机头像PHP版
2006/10/09 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
php把数组值转换成键的方法
2015/07/13 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
初学Javascript的一些总结
2008/11/03 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
详解react服务端渲染(同构)的方法
2017/09/21 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
django使用xlwt导出excel文件实例代码
2018/02/06 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
如何使用repr调试python程序
2020/02/28 Python
如何在django中运行scrapy框架
2020/04/22 Python
网络工程师的自我评价
2013/10/02 职场文书
2014年自我评价
2014/01/04 职场文书
正科级干部考察材料
2014/05/29 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
董存瑞观后感
2015/06/11 职场文书
mysql 索引合并的使用
2021/08/30 MySQL