2012-02-14 174 views
1

我希望AJAX回調觸發myFucntion中的alert(),它的工作原理是如何在ajaxResponse中引用myobject對象?將對象傳遞給onreadystatechange

function myobject(){ 

this.val="worked"; 

http.onreadystatechange =function ajaxResponse() { 
if (http.readyState == 4) { 
this.myFunction(); 
} 

http.send(null); 

} 

myobject.prototype.myFunction=function(){ 
alert("it "+this.val); 
} 
+0

你的問題是什麼? – sinsedrix 2012-02-14 14:07:58

+0

我的問題是如何在ajaxResponse中調用this.value並引用包含此代碼的對象中的值。 – user1209203 2012-02-14 14:37:10

回答

1

ajaxResponse是在父函數的功能,這就是所謂的在JavaScript關閉。當閉包使用父函數中定義的變量時,該變量不能從內存中銷燬,而父函數完成執行。 所以,定義一個臨時變量是這樣的:

var objTmp = this; 

然後你就可以在ajaxResponse使用這個變量objTmp。 或者你可以這樣做:

http.onreadystatechange = (function(objTmp){ 
         return 
          function ajaxResponse{alert(objTmp.value)} 
         })(this) 
+0

雖然這會創建一個全局變量,但會破壞對象的點。 – user1209203 2012-02-14 15:19:00

2

父對象只是追加到XHR對象,像這樣:

http.parent = this; // Append it here 
http.onreadystatechange = function ajaxResponse() 
{ 
    if (http.readyState == 4) 
     alert(this.parent.value) // Access it here 
} 
+0

這已經工作,但只適用於 myobject.prototype.myFunction = function(){ alert(「it」+ this.val); } 如果然後做,如果(http.readyState == 4){this.myObject.myFunction();} myobject.prototype.myObject = { 回調:myFunction的(){ 警報( 「它」 +這.VAL); } } 它分崩離析。 – user1209203 2012-02-14 15:19:50