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

时间:2011-05-08 17:32:32

标签: javascript ajax

在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>

4 个答案:

答案 0 :(得分:2)

实际上,为了做到这一点,你根本不想使用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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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>
相关问题