为jQuery的$.ajax设置超时时间

  jQuery的ajax模块封装了很是强大的功能,有时候咱们在发送一个ajax请求的时候但愿能有一个超时的时间,想让程序在一段时间请求不到数据时作出一些反馈。幸运的是jQuery为咱们提供了这样的参数:timeout。今天试了一下,作个记录。php

  首先在试验以前,有一个一直搞不明白的东西,那就是默认的超时时间是多少?这个配置在到底在什么地方设置。jQuery中?仍是apache中?PHP中?jquery

  通过一番搜索,暂获得以下结论:ajax

  ①jQuery没有默认的超时时间,只能够经过参数来配置;apache

  ②apache2的默认超时时间是300秒,可是我在httpd.conf中设置Timeout 10,压根没起到做用,不明白是怎么回事api

  ③php.ini中,只找到一个max_execution_time来配置脚本最长执行时间,貌似也没什么关系ide

  智商捉急。。。哪位高手知道,必定告诉一下我啊~~函数

  下面来看jQuery中的timeout参数,值为Number类型,单位为毫秒。为了在超时的时候执行咱们定义好的处理函数,能够把它放在error参数中,以下代码:url

$.ajax({
    url : 's.php',
    timeout : 3000,
    error : function(xhr,textStatus){
      console.log('error:'+textStatus);
    },
   });

  s.php中的内容为sleep(100)。这样在3秒后会输出error:timeout,textStatus即为错误的内容。这个仍是很用的,若是你的error函数中还要进行其余处理,为了避免与超时混在一块儿,能够这么写:spa

error : function(xhr,textStatus){
      if(textStatus=='timeout'){
        //处理超时的逻辑
      }
      else{
        //其余错误的逻辑
      }
    }

  还能够把函数写在complete中,由于不管success仍是error,complete函数都会执行。code

  这下就能够轻松为超时指定动做了。不过在手工以前呢我还要小小的辟谣一下,由于在网上搜索文章的时候,有人如此描述timeout参数:会覆盖掉全局的设置。看到这句我顿时菊花一紧,难道我在这里设一次,页面上再用$.ajax的时候都会在3秒后超时?跑去官网一看文档,原句子是这么写的:“This will override any global timeout set with$.ajaxSetup().”,原来是会覆盖掉$.ajaxSetup()中的设置,若是我压根就没用$.ajaxSetup()这个函数,便什么事都没有。

相关文章
相关标签/搜索