2015-02-23 19 views
8

dlatego nazywamy zwiążesz na Ajax Success zwraca spojrzeć na ten kodJQuery wiążą na sukces Ajax

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

jeśli my nie nazywamy wiążą, to nie czyni żadnej różnicy czy jest zaletą korzystania tutaj wiążą

Odpowiedz

8

Musisz zadzwonić pod numer bind(), aby wymusić kontekst połączenia zwrotnego (this), aby był właściwy. W przeciwnym razie jest wywoływany domyślnie w kontekście globalnym (najwyraźniej jQuery wywołuje go w kontekście obiektu jqXHR). bind() ustawia kontekst twojej funkcji na cokolwiek, co ma być this.

+0

Niestety, nie udało mi się tego. Mógłbyś rozwinąć – shubham

+2

Jeśli nie wywołasz wiązania, "ten" wewnątrz wywołania zwrotnego będzie niewłaściwy. – Scimonster

1

@shubham, jego składnia javascript, aby korzystać z tego prądu w funkcji zwrotnej, jak wspomniano w

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

, pierwszy argument bind() funkcja będzie działać jak to w wywołanie funkcji, należy przejść przez yous zastosuj() i wywołaj() funkcje, ponieważ byłoby to pomocne dla ciebie.

0

zgadzam się z Scimonster.bind() ustawia kontekst swojej funkcji do tego, co to ma być, czy czynność powoduje powstanie błędu takiego: Uncaught TypeError: this.setState nie jest funkcją

1

Przypuszczam, że twój kod z React. Ponieważ ostatnio napotykam podobny problem z obsługą React.

Powrót do pytania. Myślę, że bind odtwarza funkcję transformacji. Kod następująco:

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

jest równa:

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

Jak więc za, myślę, że można zrozumieć, co jest wiążą funkcja i dlaczego używając bind, aby go osiągnąć.