В jQuery привязать на успехи "Аякса"

почему мы вызываем bind при вызовах успеха Ajax посмотрите на этот код

 $.ajax({
      url: myurl,
      dataType: 'json',
      success: function(data) {
        this.setState({data: data});
      }.bind(this) 

если мы не вызываем bind, то это имеет значение или есть преимущество использовать bind здесь

4 ответов


нужно позвонить bind() для того, чтобы заставить ваш контекст обратных вызовов (this), чтобы быть правильным. В противном случае он вызывается в глобальном контексте по умолчанию (по-видимому, jQuery вызывает его с контекстом объекта jqXHR). bind() устанавливает контекст вашей функции в whatever this должен быть.


@shubham, его синтаксис javascript для использования текущего это в вашей функции обратного вызова, как вы упомянули в

  success: function(data) {
    this.setState({data: data});
  }

, первый аргумент функции bind() будет действовать так в вызывающей функции, вы должны пройти функции apply() и call (), поскольку это было бы полезно для вас.


Я полагаю, что ваш код реагировать. Потому что недавно я столкнулся с подобной проблемой, связанной с реагировать.

вернемся к вашему вопросу. Я думаю, что bind это функция преобразования. Код следующим образом:

componentDidMount: function() {
var _this = this;
$.ajax({
  url: this.props.url,
  dataType: 'json',
  cache: false,
  success: function(data) {
    _this.setState({data: data});
  }
 });
},

равен:

componentDidMount: function() {
$.ajax({
  url: this.props.url,
  dataType: 'json',
  cache: false,
  success: function(data) {
    this.setState({data: data});
  }.bind(this)
 });
},

а так, я думаю, вы можете понять, что такое bind


Я согласен со Скимонстером.bind () устанавливает контекст вашей функции на то,что это должно быть, или ваша функция даст такую ошибку:Uncaught TypeError: this.выполнении функция setState не функция