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

avatar
Cody Lakin
7 апреля 2018 в 23:48
46
1
-1

Я не хочу показаться, будто я не проводил исследования. Я использовал это в качестве примера: Передавать аргументы в обратный вызов ajax onreadystatechange?

Однако, боюсь, моя проблема связана с определением новой функции. Я не знал, как искать эту проблему, поэтому решил спросить.

Спасибо.

Следующее говорит о том, что doSomething не является функцией, когда я вызываю getOwnerList(). Цель состоит в том, чтобы getData() можно было использовать повторно, и передать любую функцию, которую я хочу воздействовать на данные.

function updateOwnerList(data) {
    alert(data);
    return;
}

function getOwnerList() {
    getData(updateOwnerList, "getOwnerList.php");
}

function getData(doSomething, url) {
    var ajax = new XMLHttpRequest();

    ajax.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            var data = JSON.parse(this.responseText);
            console.log(data);
            doSomething(data);
        }
    }
    ajax.open("GET", "getOwnerList.php", true);
    ajax.send();
}

Редактировать: На самом деле, ответ пришел, как и ожидалось. Когда я печатаю данные, это то, что я хотел. Проблема в том, что когда я вызываю doSomething() внутри или вне функции onreadystatechange, он говорит, что функция doSomething() не существует.

Источник
Andrew
7 апреля 2018 в 23:52
0

Можете показать функцию doSomething?

Cody Lakin
7 апреля 2018 в 23:54
0

Сделать что-то - это просто функция, которая передается. Внутри getOwnerList() я передаю ему функцию. Я делаю это неправильно? Цель состоит в том, чтобы getData() можно было использовать повторно и чтобы я мог передать ему любую функцию.

Ответы (1)

avatar
Kavindra
8 апреля 2018 в 00:30
0

Это не ошибка передачи функции. Функция проходит правильно и делает то, что ее просят сделать. Убедитесь, что ваш вызов ajax получает правильный ответ. Проверьте следующие журналы консоли. Он не регистрирует строку в блоке if (this.readyState == 4 && this.status == 200) {, что означает, что его статус не равен 200 или readyState не равен 4. (В этом примере это имеет смысл, поскольку у нас нет файла «getOwnerList.php»). Я думаю, в вашем случае это также может быть проблемой. Проверьте, действительно ли вы получили ответ.

function updateOwnerList(data) {
    alert(data);
    return;
}

function getOwnerList() {
    getData(updateOwnerList, "getOwnerList.php");
}

function getData(doSomething, url) {
    doSomething('I\'m ok');
    var ajax = new XMLHttpRequest();

    ajax.onreadystatechange = function () {
        console.log('I came here');
        if (this.readyState == 4 && this.status == 200) {
            console.log('I came here too!');
            var data = JSON.parse(this.responseText);
            console.log(data);
            doSomething(data);
        } else {
            console.log("Something wrong");
        }
    }
    ajax.open("GET", "getOwnerList.php", true);
    ajax.send();
}

getOwnerList();