`
ihyperwin
  • 浏览: 435948 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jquery ajax的timeout参数和js的window.setTimeout方法

 
阅读更多
程序要实现的功能,ajax访问服务器成功,但服务器繁忙,(在服务器上通过Thread.sleep(10000000)方法模拟服务器阻塞),如果1分钟没有响应,前台页面做响应的处理。我试了两种方法。
1.jQuery  ajax timeout参数

$.ajax({
    async:false,
    cache:false,
    timeout:8000,
    type:"POST",
    url:"someurl.htm",
    data:allFormValues,
    error:function(jqXHR, textStatus, errorThrown){
         alert("some error occurred")
         alert(textStatus);
    },
    success:function(msg){ alert(msg); }
   });

效果:ajax成功访问服务器,一直处于服务器响应中状态,用fireBug观看XHR status状态码无,一直请求中。 n久之后,返回响应,进入success. 如果把服务器down掉,进入error方法。
这些不是我想要的结果。
timeout参数api如下:
timeout

Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.

The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent。
大概意思:如果有其他请求队列(该请求在客户端被阻塞),或者没有联网,就有可能在ajax sent方法被调用之前超时。   按照其定义,timeout参数,应该只是请求超时,不涉及响应。 此处,服务器被阻塞,请求却是成功了,服务器响应中。。。。。
而且,不会执行 error和success方法,直至响应完毕,或者服务器down掉(也算响应完毕)


2.window.setTimeout方法
本来用此法,思路如下:

function click(){


var  flag=0;

setTimeout(aa,5000);
function aa(){
  //to do something
   if(flag==0) {
       alert("timeout");
       window.reload();
    }
}

$.ajax({
    async;false,
    cache:false,
    timeout:8000,
    type:"POST",
    url:"someurl.htm",
    data:allFormValues,
    error:function(jqXHR, textStatus, errorThrown){
        flag=1;
        alert("some error occurred")
         alert(textStatus);
    },
    success:function(msg){ 
       flag=1;
      alert(msg);
   }
   });

}
预期效果:给ajax 5秒的时间,如果没响应(包括success和error),则做进一步处理。弹出timeout,刷新本页,干掉ajax. 
在网上查找  setTimeout方法确实是模拟了另开一个线程(不是真的?求解)
但效果:

setTimeout 5秒钟后并没有执行aa函数, 而是。。

ajax无限等待 response,等n久后或故意把服务端down掉,先进入ajax error回调或success回调函数, 又过5秒,在执行aa

晕了,为什么?是把整个function执行完,在执行setTimeout?

坐等各位遇到此问题的朋友来交流,大牛们给予指点。

问题已解决:把 $.ajax({
    async:false,
    cache:false,
    timeout:8000,
    type:"POST",
    url:"someurl.htm",
    data:allFormValues,
    error:function(jqXHR, textStatus, errorThrown){
         alert("some error occurred")
         alert(textStatus);
    },
    success:function(msg){ alert(msg); }
   });
设为 async:true,设为异步,
  可以了,8秒后返回弹出"some error occurred",then alert "timeout"

   参数设置为同步,timeout参数貌似不管用............
 
 







分享到:
评论

相关推荐

    为jquery的ajax请求添加超时timeout时间的操作方法

    总结以上所述,为jQuery的Ajax请求添加超时时间的操作方法能够让开发者更加主动地管理网络请求的行为,提升应用的响应速度和用户体验。通过合理设置timeout值,并结合success、error和complete回调函数,可以在不同...

    JavaScript_window.setTimeout()_的详细用法

    `window.setTimeout()`和`window.setInterval()`是JavaScript中非常实用的两个API,它们可以用来实现各种基于时间的功能,如定时任务、倒计时等。正确理解和使用这两个API,可以帮助开发者更好地控制程序的执行流程...

    字符串 window.open() window.opener window.name window对象等的总结

    ### `window`对象的其他重要属性和方法 - `window.location`:包含了当前窗口URL的信息,可以修改来导航到新的页面。 - `window.history`:提供了浏览历史记录的管理功能,如`history.back()`、`history.forward()`...

    精解window.setTimeout()window.setInterval()使用方式与参数传递问题!

    这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。 我们常用的使用场景是: 代码如下:window.setTimeout(...

    use-set-safe-timeout:提供“window.setTimeout”版本的 React 钩子可以清除卸载时的超时

    一个React钩子,提供window.setTimeout的版本,该版本在卸载时会自行清除。 消除了不必担心在 React 组件中手动清除卸载超时的开销。 特征 提供可以像window.setTimeout一样调用的回调。 调用时,返回一个可以调用...

    window.open最大化操作

    window.open方法可以打开一个新的浏览器窗口,该方法接受三个参数:URL、窗口名称和窗口特性。其中,窗口特性可以指定窗口的各种属性,如宽度、高度、工具栏、菜单栏、滚动条等。 现在,让我们来看一下如何使用...

    JavaScript window.setTimeout() 的详细用法

    虽然我学习和应用javascript已经两年多了,但是对setTimeout方法,有时候也要查阅资料。今天对js的setTimeout方法做一个系统地总结。 setInterval与setTimeout的区别 说道setTimeout,很容易就会想到setInterval,...

    在window.setTimeout方法中传送对象

    其语法是: window.setTimeout(expr,msec) expr是执行字符串,在msec毫秒之后,就会作为js运行。我昨天才发现,原来expr也可以是一个函数,呵呵,用这个特性,就可以进行对象的传送了。 下面的代码实现了把函数foo1...

    window的timeout方法

    ### window的timeout方法 在Web开发中,`window.setTimeout`是一个非常重要的函数,它属于`window`对象,用于实现延时执行某些代码的功能。通过设置一个定时器,在指定的毫秒数后调用一个函数或计算一个表达式。这...

    jsWindow对象及方法.pdf

    根据提供的文件信息,这是一篇关于JavaScript中的window对象及其方法的文档。window对象是Web浏览器中的一个全局对象,它代表了浏览器窗口本身,是JavaScript中的最顶级对象。以下是关于window对象及其相关方法的...

    精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!

    在JavaScript编程中,window对象下的setTimeout和setInterval是两个非常重要的定时器方法,它们能够让某些函数延迟执行或者每隔一段时间重复执行。但是,由于这两个方法运行在一个由脚本宿主模拟出来的Timer线程中,...

    jQuery-ajax-json实现自动轮播图.rar

    jQuery是一个轻量级的JavaScript库,极大地简化了DOM操作、事件处理和Ajax交互;ajax用于异步数据传输,使页面无需刷新即可获取新数据;json则是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    关于js-window对象的方法和属性资料

    ### 关于JS Window对象的方法和属性详解 #### 概述 在JavaScript中,`window`对象是最顶层的对象,几乎所有的全局变量、...此外,`window`对象还包含了其他更多的属性和方法,开发者可以根据具体需求进行探索和利用。

    jQuery setTimeout()函数使用方法

    和window.clearTimeout一起使用.我在 代码如下:$(document).ready(function(){setTimout(test(),200); function test() { alert(1); } }); 只会执行一次,有朋友说可以使用 代码如下:setInterval (...

    fd-timeout:window.setTimeout FP 风格

    fd-超时 window.setTimeout FP 风格安装npm install fd-timeout --save 用法 var timeout = require ( 'fd-timeout' ) ;var after2s = timeout ( 2000 ) ;after2s ( function ( ) { alert ( 'FP rocks' ) ;}...

    window对象方法属性全解

    了解并熟练掌握Window对象的方法和属性,可以帮助开发者编写出性能更高、更简洁的JavaScript代码。 Window对象拥有众多方法,其中最常用的一些包括: 1. `open`方法:用于打开新的浏览器窗口,例如`window.open...

    ajax对jquery的支持

    `$.ajax()`方法接受一个包含多种配置选项的对象参数,如URL、类型(GET或POST)、数据、成功回调函数等: ```javascript $.ajax({ url: 'http://example.com/stock-api', // 股票API接口地址 type: 'GET', ...

    ajax jquery 常用图片

    使用Ajax的`$.ajax()`或`$.get()`方法,我们可以向服务器发送请求,获取图片的URL,然后利用JavaScript创建新的`<img>`元素插入到DOM中。 jQuery则提供了更简洁的API来处理这些任务。例如,可以使用`$.load()`方法...

Global site tag (gtag.js) - Google Analytics