2010-10-18 15 views
7

Birden çok konumda tekrar tekrar kullandığım için bir işlev içinde ajax araması yapmak istiyorum. Geri verilen yanıtın yönlendirilmiş bir sürümünü istiyorum. İşte yapmaya çalıştığım şey (büyük ölçüde basitleştirilmiş). Ne oluyorBir jquery ajax çağrısının bir işlev içinde yürütülmesi ile ilgili sorunlar

a = getAjax(); 
$('body').append('<div>'+a+'</div>'); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    return response; 
    }); 
} 

, ancak, "bir" getAjax fonksiyonunda tanımlanmıştır önce ekleme fonksiyonu çalıştıran olmasıdır. Düşüncesi olan var mı?

cevap

8

farklı sonuçlar

için aynı AJAX komutunu kullanmaya devam etmek durumunda
a = getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    inputText(response); 
    }); 
} 

inputText(someText) { 
$(document.body).append('<div>'+ someText +'</div>'); 
} 

Bu yolla oluşturabilirsiniz.

Alanlar arası istekleri ve dataType: sigara zaman uyumsuz üzerine

var a; 
getAjax(); 
$('body').append('<div>'+a+'</div>'); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    async: false, 
    success: function(response) { 
    a = response; 
    }); 
} 

Önemli not:

$.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    AppendResponse(response); 
    }); 

diğer yanlış http://api.jquery.com/jQuery.ajax/ için zaman uyumsuz ayarlamaktır: Bir başarı geri arama kullanmaktır " jsonp "istekleri senkronize işlemi desteklemiyor.

13

AJAX eş zamansızdır. Bu, başarı işleyicisindeki kodun istek başarılı olana kadar ertelendiği ve kodun geri kalanı normal olarak devam ettiği anlamına gelir. Sen AJAX başarı işleyicisi ilgili kod yerleştirmeniz gerekir: Ben de yerli Javascript document.body kullanarak yerine standart etiketi seçici kullanarak body seçici optimize

getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    $(document.body).append('<div>'+response+'</div>'); 
    }); 
} 

Not.


Düzenleme Geri arama sürümü Artık bir geri arama işlevini kullanarak kod satır içi yapabilirsiniz

function getAjax(callback) { 
    $.ajax({ 
     type: 'GET', 
     url: 'someURL', 
     success: callback 
    }); 
} 

:

getAjax(function(response) { 
    $(document.body).append('<div>'+response+'</div>'); 
}); 

veya

getAjax(function(response) { 
    alert(response); 
}); 

ya da her neyse.

Anonim işlev çağrısı içindeki kod, AJAX isteği tamamlandığında işlenecektir.

+0

'a' tanımlı değil 'geri' ile geri bildirim 'a' yerine geçmek için kodunuzu düzenleyin, 'a' tanımlı değil – amurra

+0

Bunu kullanabilir, ancak başarılı ajax üzerine her zaman aynı işlemleri yapmak istemiyorum tepki. Bu yüzden cevabı geri vermek istiyorum. – dwelch

+0

Yanıtı bu şekilde döndürmek AJAX'ın tasarlandığı şey değildir. Cevabı, işlevi çağırdığınızda ne olmasını istediğinizi ayarlamanın bir yolunu sağladım. – lonesomeday

1

Yanıtı, geri dönüş başarısındaki başka bir işleve neden dönmüyorsunuz? Bu, farklı tepkiler için ihtiyacı ele olmalıdır: Ben

getAjax(); 
function getAjax() { 
    $.ajax({ 
    type: "GET", 
    url: 'someURL', 
    success: function(response) { 
    AppendResponse(response); 
    }); 
} 

function AppendResponse(response) { 
$('body').append('<div>'+response+'</div>'); 
} 
2

Bir öneri bunu çalıştırmak böylece AJAX Yanıt niteliğinde

aldıktan sonra AJAX fonksiyonuna içine çalıştırmak istediğiniz komutu için bir tetikleyici geçmektir ifadeleri/diğer alternatifleri bu saçak bir iki yolu vardır
+0

FWIW, bunu “başarı: inputText” olarak kısaltabilirsiniz. 'inputText' işlevi için bir referanstır. Sadece anonim işlevler değil geri aramalar olarak kullanılabilir! – lonesomeday