为什么我们在Ajax Success调用上调用bind 看看这段代码
$.ajax({
url: myurl,
dataType: 'json',
success: function(data) {
this.setState({data: data});
}.bind(this)
如果我们不调用bind,那么它是否有任何区别,或者在这里使用bind是有利的
答案 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不是函数