Eu quero usar jQuery ajax para recuperar dados de um servidor.
Quero colocar a definição da função de retorno de chamada de sucesso fora do .ajax()
bloco, como a seguir. Então, preciso declarar a variável dataFromServer
como a seguir para poder usar os dados retornados do retorno de chamada de sucesso?
Já vi a maioria das pessoas definir o retorno de chamada de sucesso dentro do .ajax()
bloco. Portanto, o código a seguir está correto se eu quiser definir o retorno de chamada de sucesso externo?
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
}
fonte
deferred objects
coisa foi apresentada? Eu não vi isso antes. Além disso, parece um pouco confuso, já que o código que define qual retorno de chamada usar está em um local diferente do que a chamada AJAX real.success:
. Separar o retorno de chamada do AJAX é uma coisa boa ! Veja as notas que acabei de adicionar ao final da minha resposta.$.get()
por exemplo, seria impossível adicionar umerror:
manipulador porque$.get
não o suporta. No entanto, você pode adicionar um.fail
ao resultado adiado de$.get
.A "nova" maneira de fazer isso desde jQuery 1.5 (janeiro de 2011) é usar objetos adiados em vez de passar um
success
retorno de chamada. Você deve retornar o resultado de$.ajax
e, em seguida, usar os métodos.done
,.fail
etc para adicionar os retornos de$.ajax
chamada fora da chamada .Isso separa o tratamento de callback do tratamento AJAX, permite que você adicione múltiplos callbacks, callbacks de falha, etc, tudo sem nunca precisar modificar a
getData()
função original . Separar a funcionalidade AJAX do conjunto de ações a serem concluídas posteriormente é uma coisa boa! .Os adiados também permitem uma sincronização muito mais fácil de vários eventos assíncronos, que você não pode fazer facilmente apenas com
success:
Por exemplo, eu poderia adicionar vários retornos de chamada, um gerenciador de erros e esperar que um cronômetro transcorra antes de continuar:
Outras partes do jQuery também usam objetos adiados - você pode sincronizar animações do jQuery com outras operações assíncronas muito facilmente com eles.
fonte
success:
porque adiados funcionam muito melhor.user:6782 deferred
por muitos mais exemplos.alert
embora ... Eu pessoalmente usoconsole.log(data)
ou se é uma matriz:console.table(data)
:)Não sei por que você está definindo o parâmetro fora do script. Isso é desnecessário. Sua função de retorno de chamada será chamada com os dados de retorno como um parâmetro automaticamente. É muito possível definir o seu retorno de chamada fora do
sucess:
iea função handleData será chamada e o parâmetro passado a ela pela função ajax.
fonte
Tente reescrever seu gerenciador de sucesso para:
A propriedade de sucesso do método ajax requer apenas uma referência a uma função.
Em sua função handleData, você pode usar até 3 parâmetros:
fonte
Eu escreveria :
fonte
dataFromServer
para que a primeira linha possa ser removida.depois de algumas horas, brinque com ele e quase se torne maçante. milagre veio a mim, funcionou.
fonte
success : callback
jquery irá acionar sua função chamadacallback
com odata
parâmetro nela.Você não precisa declarar a variável. A função de sucesso do Ajax leva automaticamente até 3 parâmetros:
Function( Object data, String textStatus, jqXHR jqXHR )
fonte
Em seu componente, ou seja, código JS angular:
fonte