jQuery ajax success callback function definição

Eu quero usar o jQuery ajax para recuperar dados de um servidor.

Eu quero colocar a definição de function de retorno de chamada de sucesso fora do bloco .ajax() como o seguinte. Então eu preciso declarar a variável dataFromServer como o seguinte para que eu possa usar os dados retornados do callback de sucesso?

Eu vi a maioria das pessoas definir o callback de sucesso dentro do bloco .ajax() . Então, o código a seguir está correto se eu quiser definir o retorno de chamada de sucesso do lado de fora?

 var dataFromServer; //declare the variable first function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData(dataFromServer) }) } function handleData(data) { alert(data); //do some stuff } 

Apenas use:

 function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } 

A propriedade success requer apenas uma referência a uma function e passa os dados como parâmetro para essa function.

Você pode acessar sua function handleData como esta devido à maneira como o handleData é declarado. JavaScript irá analisar seu código para declarações de function antes de executá-lo, assim você poderá usar a function no código que está antes da declaração real. Isso é conhecido como içamento .

Isso não conta para funções declaradas assim:

 var myfunction = function(){} 

Esses só estão disponíveis quando o intérprete os passou.

Veja esta questão para mais informações sobre as 2 maneiras de declarar funções

A “nova” maneira de fazer isso desde o jQuery 1.5 (Jan 2011) é usar objects adiados em vez de passar um callback de success . Você deve retornar o resultado de $.ajax e, em seguida, usar os .done , .fail etc para adicionar os retornos de chamada fora da $.ajax .

 function getData() { return $.ajax({ url : 'example.com', type: 'GET' }); } function handleData(data /* , textStatus, jqXHR */ ) { alert(data); //do some stuff } getData().done(handleData); 

Isso separa o tratamento de retorno de chamada do manuseio AJAX, permite adicionar vários callbacks, callbacks de falha, etc, tudo sem precisar modificar a function getData() . Separar a funcionalidade do AJAX do conjunto de ações a ser completado depois é uma coisa boa! .

Os adiados também permitem synchronization muito mais fácil de vários events asynchronouss, que você não pode fazer facilmente com success:

Por exemplo, eu poderia adicionar vários retornos de chamada, um manipulador de erros e esperar que um cronômetro passasse antes de continuar:

 // a trivial timer, just for demo purposes - // it resolves itself after 5 seconds var timer = $.Deferred(); setTimeout(timer.resolve, 5000); // add a done handler _and_ an `error:` handler, even though `getData` // didn't directly expose that functionality var ajax = getData().done(handleData).fail(error); $.when(timer, ajax).done(function() { // this won't be called until *both* the AJAX and the 5s timer have finished }); ajax.done(function(data) { // you can add additional callbacks too, even if the AJAX call // already finished }); 

Outras partes do jQuery também usam objects adiados – você pode sincronizar animações jQuery com outras operações assíncronas facilmente com elas.

Eu não sei porque você está definindo o parâmetro fora do script. Isso é desnecessário. Sua function de retorno de chamada será chamada com os dados de retorno como um parâmetro automaticamente. É muito possível definir seu callback fora do sucess: ie

 function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } function handleData(data) { alert(data); //do some stuff } 

a function handleData será chamada e o parâmetro passado para ela pela function ajax.

Tente rewrite seu manipulador de sucesso para:

 success : handleData 

A propriedade success do método ajax requer apenas uma referência a uma function.

Na sua function handleData você pode usar até 3 parâmetros:

 object data string textStatus jqXHR jqXHR 

Eu escreveria :

 var dataFromServer; //declare the variable first var handleData = function (data) { alert(data); //do some stuff } function getData() { $.ajax({ url : 'example.com', type: 'GET', success : handleData }) } 

Você não precisa declarar a variável. A function de sucesso do Ajax leva automaticamente até 3 parâmetros: Function( Object data, String textStatus, jqXHR jqXHR )

depois de algumas horas, brinque e quase fique sem graça. milagre veio a mim, funciona.

 
 var listname = []; $.ajax({ url : wedding, // change to your local url, this not work with absolute url success: function (data) { callback(data); } }); function callback(data) { $(data).find("a").attr("href", function (i, val) { if( val.match(/\.(jpe?g|png|gif)$/) ) { // $('#displayImage1').append( "" ); listname.push(val); } }); } function myfunction() { alert (listname); } 

Em seu componente, ou seja, código JS angular:

 function getData(){ window.location.href = 'http://localhost:1036/api/Employee/GetExcelData'; }