如何在不更改功能结构的情况下保留上下文?

时间:2018-12-24 00:00:32

标签: javascript jquery ajax get this

如何保持上下文并从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 :(得分:0)

这是您使用代码的方式。您只需将options传递给getJson,而不传递options.url

您的init函数返回一个Promise,因此您可以使用.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>