JQuery Ajax Успешный обработчик не может найти функцию класса - PullRequest
0 голосов
/ 15 января 2020

У меня есть класс js, который публикует некоторые данные. Однако, когда обработчик успеха запущен, он не может найти функцию. Когда класс построен, функция найдена. Я могу вызвать это из любой другой функции. Кажется, он просто не может его найти - в обработчике успеха.

Как получить обработчику успеха возможность видеть другие функции в классе?

Я получаю ошибку:

Ошибка типа: this.doSomething не является функцией

class MyClass {

    constructor(options) {
        this.doSomething();

        $("#btn_submit").on('click', function (e) {
            e.preventDefault();
            post({});
        });
    }

    doSomething() {
        console.log('Doing Something');
    }

    successHandler(data) {
       console.log(JSON.stringify(data));
       // THIS IS WHERE IT CAN"T FIND THE FUNCTION
       // And the error is thrown
       this.doSomething();
    }

    errorHandler() {
       console.log('An error occurred);
    }


    post(data) {
        $.ajax({
           url        : 'some post url',
           type       : 'POST',
           data       : data,
           contentType: 'application/x-www-form-urlencoded',
           dataType   : 'json',
           success    : successHandler,
           error      : errorHandler
       });
    }
}

1 Ответ

3 голосов
/ 15 января 2020

Вы потеряли контекст. Добавить .bind(this) к successHandler/errorHandler.

    post(data) {
        $.ajax({
           url        : 'some post url',
           type       : 'POST',
           data       : data,
           contentType: 'application/x-www-form-urlencoded',
           dataType   : 'json',
           success    : this.successHandler.bind(this),
           error      : this.errorHandler.bind(this)
       });
    }

Подробнее: https://towardsdatascience.com/javascript-context-this-keyword-9a78a19d5786

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