JQuery绑定Ajax成功

时间:2015-02-23 10:06:26

标签: javascript jquery ajax bind

为什么我们在Ajax Success调用上调用bind 看看这段代码

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

如果我们不调用bind,那么它是否有任何区别,或者在这里使用bind是有利的

4 个答案:

答案 0 :(得分:8)

您需要调用bind()以强制回调上下文(this)成为正确的事情。否则,默认情况下会在全局上下文中调用它(显然,jQuery使用jqXHR对象的上下文调用它)。 bind()将函数的上下文设置为this应该是什么。

答案 1 :(得分:1)

@shubham,它在你的回调函数中使用当前的javascript语法,如

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

,bind()函数的第一个参数将在调用函数时起作用,你应该通过apply()和call()函数,因为这对你有帮助。

答案 2 :(得分:1)

我认为您的代码来自 React 。因为最近我遇到了处理 React 的类似问题。

回到你的问题。我认为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实现它的原因。

答案 3 :(得分:0)

我同意Scimonster.bind()将函数的上下文设置为应该是什么,或者你的函数会给出如下错误:未捕获TypeError:this.setState不是函数