【问题标题】:Passing object to onreadystatechange将对象传递给 onreadystatechange
【发布时间】:2012-03-05 21:39:35
【问题描述】:

我希望 AJAX 回调触发 myFucntion 中的 alert() 并显示“它有效”,我如何在 ajaxResponse 中引用 myobject 对象?

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);
}

【问题讨论】:

  • 我的问题是如何在 ajaxResponse 中调用 this.value 并引用包含此代码的对象中的值。

标签: javascript ajax oop


【解决方案1】:

只需将父对象附加到 xhr 对象,如下所示:

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

【讨论】:

  • 这有效,但仅适用于 myobject.prototype.myFunction=function(){ alert("it "+this.val); } if then do if (http.readyState == 4) {this.myObject.myFunction();} myobject.prototype.myObject={ callback:myFunction(){ alert("it "+this.val); } } 它分崩离析。
【解决方案2】:

ajaxResponse 是父函数中的一个函数,在javascript中称为闭包。当闭包使用在其父函数中定义的变量时,该变量不能从内存中销毁,而父函数完成执行。 所以,像这样定义一个临时变量:

var objTmp = this;

那么你就可以在ajaxResponse中使用这个变量objTmp了。 或者你可以这样做:

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

【讨论】:

  • 这会创建一个全局变量,但这会破坏对象的点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2016-07-12
  • 2018-11-09
  • 2012-03-04
相关资源
最近更新 更多