标签归档:javascript

jquery采用ajax方式获取数据时,如何设置超时时间

var ajaxTest = $.ajax({
  url:” ,//请求URL
  timeout:2000, //超时时间(单位毫秒)
  type:’get’, //get或post
  data:{}, //请求所传参数 通常为json格式
  dataType:’json’,//返回的数据格式
  success:function(data){
    alert(“成功”);
  },
  complete:function(XMLHttpRequest,status){ //请求完成后最终执行参数
    if(status==’timeout’){
      ajaxTest.abort();
      alert(“超时”);
    }
  }
});

设置timeout的时间,通过检测complete时status的值判断请求是否超时,如果超时,则执行相应的操作。
设置timeout的原理,在创建ajax请求时,设置 window.setTimeOut(2000),setTimeOut所对应的函数开始运行时,request还在运行,此时应该终止请求函数,并且返回状态’timeout’

实例应用 javascript中 call 和 apply 用法及常用之处

在javascript中,每个函数都具备两个{call,apply}方法,通过call和apply方法,可以调用使一个函数调用一个函数:
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。

apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
举例说明:
< input type="text" id="myTest" value="testInformation">
< script>
function setV1(){this.v=”首次设置”;}
var v=”v 变量”;
function fun2(){alert(this.value);}

window.fun2(); //v 变量
fun2.call(window); //v 变量
fun2.call(document.getElementById(‘myTest’));
fun2.call(new setV1()); //首次设置
< /script>

call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
运行如下代码:
< script>
var fun1=new function(){this.value=”fun1″}
var fun2=function(x){
var value=”fun2″;
alert(this.value);
alert(x);
}
fun2(fun1,”vvv”);
< /script>

可见分别弹出了fun1和vvv。到这里就对call的每个参数的意义有所了解了。

对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 fun2.call(func1,var1,var2,var3)对应的apply写法为:fun2.apply(func1,[var1,var2,var3])

javascript语言之 this概念

由于javascript是一种解释性语言,运行时才会解释所有的变量值,所以对于javascript中this所指的对象是动态变化的,由于函数调用方式不同它可以指向全局对象,局部对象或者任意对象。

this对象生成:当javascript开始加载时 ,this对象指window,当申明一个对象时 例 var t={} 此时t对象里面的方式 调用this时指向 t。

一:
当在全局范围内使用 this,那么这个this对象就是指向window。
二:
在一个函数里面使用this,那么this就是一个局部对象,则this为此函数对象
< script>
var t = {
x:0,
y:0,
fun1: function(x,y) {
this.x = this.x + x;
this.y = this.y + y;
alert(“x 数值:”+x);
alert(“y 数值:”+y);
}
};
t.fun1(2,3)//this 绑定到当前对象,即 t 对象
< /script>
三:
函数里面调用this对象,则被绑定为全部对象,x变量被加载为 全部变量(慎用)。
< script>
function xToQuanJu(x) {
this.x = x;
}
xToQuanJu(5);
alert(x);
< /script>
四:
作为构造函数调用
JavaScript 支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript 并没有类(class)的概念,而是使用基于原型(prototype)的继承方式。相应的,JavaScript 中的构造函数也很特殊,如果不使用 new 调用,则和普通函数一样。作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。如果调用正确,this 绑定到新创建的对象上。
在 JavaScript 中函数也是对象,对象则有方法,apply 和 call 就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即 this 绑定的对象。
function fun1(x, y){
this.x = x;
this.y = y;
this.fun2= function(x, y){
this.x = x;
this.y = y;
}
}

var f1= new fun1(0, 0);
var f2= {x: 0, y: 0};
f1.fun2(1, 1);
f1.fun2.apply(f2, [10, 10]);
在上面的例子中,我们使用构造函数生成了一个对象 f1,该对象同时具有 fun2 方法;创建了另一个对象 p2 数据集合变量,我们看到使用 apply 可以将 f1 的方法应用到f2 上,这时候 this 也被绑定到对象f2 上。另一个方法 call 也具备同样功能,不同的是最后的参数不是作为一个数组统一传入,而是分开传入的。