ajax使用函式中的this變數問題及其解決方法
我們經常在使用ajax時,需要將裡面返回的變數再重新賦值給函式中的公有變數,這邊有個例子,大家可以看看
function classA {
this.name = "classA";
}
classA.prototype.getMessage = function() {
$.ajax({
type:"post",
url://請求url地址,可以為servlet地址,
success: function(msg) {
//msg為從servlet獲取到的資料
this.name = msg; //此時想將獲取到的資訊賦值給name屬性
},
error:function(){
alert("wrong");
}
});
}
然而此時系統報錯,提示找不到name屬性"cannot read the property name",原因是因為此時的this所指的上下文是ajax作用域內的上下文,並不是classA中的上下文,因此此時找不到name屬性就正常了。
這裡需要對getMessage稍微做些調整就行
classA.prototype.getMessage = function() {
var myname = this.name; //此時將this.name付給另外一個var變數
$.ajax({
type:"post",
url://請求url地址,可以為servlet地址,
success: function(msg) {
//msg為從servlet獲取到的資料
myname = msg; //此時想將獲取到的資訊賦值給name屬性
},
error:function(){
alert("wrong");
}
});
}
這樣在ajax不會再使用this指標,從而不會產生上面this指代錯誤的問題。var myname在ajax作用域相當於全域性變數,可以直接使用。