2015-02-23 11 views
8

perché chiamiamo legato sulla Ajax Successo chiama un'occhiata a questo codiceJQuery legato sulla successo Ajax

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

se noi non chiamare bind, poi non si fa alcuna differenza o non v'è il vantaggio di utilizzare legano qui

risposta

8

È necessario chiamare lo bind() per forzare il contesto di callback (this) a essere la cosa giusta. Altrimenti, viene chiamato nel contesto globale per impostazione predefinita (apparentemente, jQuery lo chiama con un contesto dell'oggetto jqXHR). bind() imposta il contesto della funzione su qualsiasi cosa si supponga che sia this.

+0

Spiacente di non averlo capito.Per favore, si prega di elaborare – shubham

+2

Se non si chiama bind, 'this' all'interno della richiamata sarà la cosa sbagliata. – Scimonster

1

@shubham, la sua sintassi JavaScript per utilizzare corrente questo nella vostra funzione di callback come lei ha ricordato nel

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

, primo argomento di bind() la funzione agirà come questo in funzione di chiamata, yous dovrebbe passare attraverso applica() e chiama() le funzioni in quanto ciò sarebbe utile per te.

0

Sono d'accordo con Scimonster.bind() imposta il contesto della funzione di qualunque cosa si suppone che sia, o la funzione darà un errore come questo: TypeError Uncaught: this.setState non è una funzione

1

Suppongo che il tuo codice da Reagisca. Perché recentemente ho riscontrato un problema simile relativo a React.

Torna alla tua domanda. Penso che lo bind sia una funzione di trasformazione. Codice come segue:

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

è pari a:

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

quanto così per, penso che si può capire che cosa è la funzione legano e perché utilizzando bind per realizzarla.

Problemi correlati