Как сохранить контекст без изменения структуры функции? - PullRequest
0 голосов
/ 24 декабря 2018

Как я могу сохранить контекст и получать истинные данные из ответа ajax, придерживаясь текущей структуры моего кода?

Например: во втором случае я получаю правильные данные.Как получить тот же результат, используя текущую структуру?(первый console.log)

var options = {
    url: 'http://echo.jsontest.com/key/value'
};

function getJson(options) {
    this.init(options);
}

$.extend(getJson.prototype, {
    options: null,

    init: function (options) {
        this.options = options;

        return $.get(this.options.url);
    }
});

console.log('First:');
console.log(new getJson(options.url));
console.log('Second:');
console.log($.get(options.url));
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

1 Ответ

0 голосов
/ 24 декабря 2018

Вот как вы можете использовать свой код.Вам нужно передать только options в getJson, а не options.url.

Ваша функция init возвращает обещание, поэтому вы можете использовать .then и .done для работы с результатом.

var options = {
    url: 'https://jsonplaceholder.typicode.com/todos/1'
};

function getJson(options) {
    return this.init(options);
}

$.extend(getJson.prototype, {
    options: null,

    init: function (options) {
        this.options = options;
        return $.get(this.options.url);
    }
});

$.when( new getJson(options) )
  .then(function(data) {
    console.log(data);
  })
  .fail(function(data, statusText) {
    console.log(statusText)
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
...