Как я передам ссылку на переменную во вторую функцию, когда первая функция вызвала вторую функцию внутри первой функции? - PullRequest
0 голосов
/ 08 мая 2011

В функции 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 ]

2 голосов
/ 08 мая 2011

На самом деле, для этого вам вообще не нужно использовать 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 .

0 голосов
/ 08 мая 2011
<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).

0 голосов
/ 08 мая 2011

Майк Сэмюэл почти правильно, но 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>
0 голосов
/ 08 мая 2011

Изменить this.func = func; на this.func = function () { func(xmlhttp.responseText); };

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...