一旦第一个函数调用了第一个函数内的第二个函数,我将如何将变量的引用传递给第二个函数



在change_text()函数中,我试图将xmhttp.responsetext变量传递给它,但是我将如何做到这一点?因为我认为还没有办法通过它?

<script type="text/javascript">
function ajax(url, func) {
    this.url = url;
    var xmlhttp =  new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
            this.func = func;
        }
    }
    xmlhttp.open();
    xmlhttp.send()
}
function change_text() {
    target = document.getElementById("x");
       target.innerHTML = xmlhttp.responseText;
}
ajax("url.php", change_text);
</script>
实际上

,要做到这一点,你根本不想使用this,因为你没有创建对象的任何实例,它不像一个构造函数。

您可以只:

function ajax(url, func) {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            // note: loaded is 4 ^
            func(xmlhttp.responseText);
        }
    }
    xmlhttp.open('GET', url, true);
    //            ^~~ you also forgot to pass parameters here
    xmlhttp.send('');
}

这将使ajax函数起作用。

对于您的change_text函数,它与ajax不在同一函数中,因此它无法访问xmlhttp变量。但是,ajax函数将 responseText 传递给它,所以只需让你的函数接收它:

function change_text(responseText) {
    var target = document.getElementById("x");
//  ^~~ don't forget to declare local variables with `var`.
    target.innerHTML = responseText;
}

有关工作示例,请参阅 jsFiddle。

this.func = func;更改为this.func = function () { func(xmlhttp.responseText); };

<script type="text/javascript">
function ajax(url, func) {
    this.url = url;
    var xmlhttp =  new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
            func(xmlhttp);
        }
    }
    xmlhttp.open();
    xmlhttp.send()
}
function change_text(xmlhttp) {
    target = document.getElementById("x");
       target.innerHTML = xmlhttp.responseText;
}
ajax("url.php", change_text);
</script>

您必须使用参数调用回调。另请注意,this.url = url只是设置window.url = url这可能是一个错误。

您可能想要xmlhttp.open("POST", url)

Mike Samuel 几乎是正确的,但change_text缺少一个参数,请尝试以下操作:

<script type="text/javascript">
function ajax(url, func) {
    this.url = url;
    var xmlhttp =  new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        //did you mean: func(xmlhttp.responseText);
        if(xmlhttp.readyState == 2 && xmlhttp.status == 200) {
            this.func = function() {
                 func(xmlhttp.responseText);
            };
        }
    }
    xmlhttp.open();
    xmlhttp.send()
}
function change_text(responseText) {
    target = document.getElementById("x");
target.innerHTML = responseText;
}
ajax("url.php", change_text);
</script>

最新更新