在不是回调的AJAX调用中访问此上下文?

时间:2018-04-18 16:05:38

标签: javascript jquery ajax this

我有一个AJAX调用,我在URL调用中使用绑定到this的变量。我在回调中也需要这个。

最初我使用var _that = this模式,但是没有通过代码审查。我投入了context: this,但不确定它是否适用于第二个链接,我需要实际访问它,或者它是否仅在回调中可用。

问题:

访问this参数中使用的url上下文变量以及回调的最简洁方法是什么?

    $.ajax({
        url: "/search/".concat(_this.options.modelId),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        type: 'PUT',
        data: JSON.stringify(templatePerms),
        context: this,
        success: function(data) {
            this.message('Success!', 'Updated', 'success');
            this.cleanup();
        }
    });

2 个答案:

答案 0 :(得分:0)

不是创建额外的变量(例如_this),而是使用Function.bind()作为thisArg传递this

success: function(data) {
    this.message('Success!', 'Updated', 'success');
    this.cleanup();
}.bind(this)

答案 1 :(得分:0)

class Test {
  constructor() {
  this.options = {};
    this.options.modelId = '1';
    this.doIt();
  }

  doIt() {
    $.ajax({
      url: 'https://jsonplaceholder.typicode.com/posts/' + this.options.modelId,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      type: 'PUT'
    })
    .then(data=>this.success.call(this, data));
  }

  success(data) {
    this.message(data);
  }

  message(msg) {
    alert(msg.id);
  }

}
new Test();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>