2012-02-14 4 views
1

Я хочу, чтобы обратный вызов AJAX вызывал предупреждение() в myFucntion с помощью «Это сработало», как я могу ссылаться на объект myobject, как это в ajaxResponse?Передача объекта на 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

+0

Мой вопрос в том, как я могу вызвать this.value в ajaxResponse и ссылаться на значение в объекте, который содержит этот код. – user1209203

ответ

1

ajaxResponse является функцией в родительской функции, это называется замыкание в JavaScript. Когда закрытие использует переменную, которая определена в ее родительской функции, эта переменная не может быть уничтожена из памяти, а функция отца завершает выполнение. Таким образом, определить временную переменную следующим образом:

var objTmp = this; 

Затем вы можете использовать эту переменную objTmp в ajaxResponse. Или вы можете сделать это следующим образом:

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

Это создает глобальную переменную, которая поражает точку объекта. – user1209203

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 = { обратного вызова: туРипсЫоп() { предупреждение ("это" + этот .val); } } он разваливается. – user1209203

Смежные вопросы