2015-02-23 7 views
8

warum wir binden auf Ajax Erfolg nennen ruft Blick auf diesen CodeJQuery Bind auf Ajax Erfolg

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

wenn wir binden nicht nennen, dann ist es einen Unterschied macht, oder es gibt den Vorteil binden verwenden hier

Antwort

8

Sie müssen bind() anrufen, um Ihre Rückrufe Kontext (this) zu zwingen, das Richtige zu sein. Andernfalls wird es standardmäßig im globalen Kontext aufgerufen (anscheinend ruft jQuery es mit einem Kontext des jqXHR-Objekts auf). bind() setzt den Kontext Ihrer Funktion auf was auch immer this sein soll.

+0

Tut mir leid, ich habe das nicht bekommen.Would Sie bitte erarbeiten – shubham

+2

Wenn Sie Bind nicht aufrufen, 'this' in den Rückruf wird die falsche Sache sein. – Scimonster

1

@shubham, sein die JavaScript-Syntax in Ihrer Callback-Funktion aktuelle dies zu verwenden, wie Sie in

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

, erstes Argument der Funktion bind(), wie dies in den Aufruf des Funktions handeln wird, sollte yous durch apply() und call() funktionieren, da dies für Sie hilfreich wäre.

0

ich mit Scimonster.bind zustimmen() setzt den Rahmen Ihrer Funktion zu, was auch immer das sein soll, oder Ihre Funktion einen Fehler wie folgt geben: Uncaught Typeerror: this.setState ist keine Funktion

1

Ich nehme an, Ihr Code von React. Weil ich kürzlich auf ähnliche Probleme stoße, die sich mit React befassen.

Zurück zu Ihrer Frage. Ich denke, die bind ist eine Transformationsfunktion spielen. Code wie folgt:

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

ist gleich:

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

Wie also, ich denke, man kann verstehen, was die binden Funktion ist und warum mit bind es zu erreichen.