1. 程式人生 > >ajax使用函式中的this變數問題及其解決方法

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作用域相當於全域性變數,可以直接使用。