2010-10-07 19 views
8

Bir kullanıcı adı alınmış olup olmadığını kontrol etmesi gereken bir işlev yazdım.Bir JQuery AJAX çağrısının yanıtını döndürme

 alert(checkusernameavailable('justausername'));

o 'tanımsız' diyor: Başka bir işlevinden işlevini çağırın ve uyarmak Şimdi zaman dönüş değeri bu. Yüksek ve düşük aradım ama yanlış yaptığımı bulamıyorum. Sanırım sadece php-echo'yu check.php içinde döndürmeliyim, ama değil. Yazdığım fonksiyon:

var checkusernameavailable = function(value) { 
    $.ajax({ 
     url: "check.php", 
     type: "POST", 
     async: false, 
     cache: false, 
     data: "username=" + value + "", 

     success: function(response) { 
     alert(response); 
     return response;   
     }, 
     error: function() { 
     alert('ajax error'); 
     } 
    }); 
    }

Neyi yanlış yapıyorum?

cevap

10

AJAX çağrıları asenkrondir, yani işlem tamamlandıktan sonra yalnızca veri döndükleri anlamına gelir. Yani checkusernameavailable yöntemi hiçbir bilgiyi (hiçbir zaman kendi başına bu yönteme dahil etmedikçe) döndürmez. Aşağıdakileri yapmak gerekir:

// Just fire and forget the method 
checkusernameavailable("userName"); 

// Change the success function to do any display you require 
success: function(response) { 
    alert(response); 
    $("#SomeDiv").html(response);  
    }, 

yöntem mesajlar check.php o AJAX zaman uyumsuz yöntemini ateşler. Yanıt alındığında, o yanıtı, $.ajax'un başarılı geri bildirimi ile ilişkili işlevde ele alırsınız. Siz de başarının callback'inde doğrudan bir işlev belirtebilirsiniz:

// Change success to point to a function name 
success: foo 

// Create a function to handle the response 
function foo(response) 
{ 
    // Do something with response 
} 

DÜZENLEME:

OP'ın açıklama uyarınca, yerine eşzamanlı olmayan, senkron olmak AJAX çağrısı değiştirmeniz gerekir (I kendim gitmedim böyle bir senkron çağrı yapılması', bu nedenle bu) test edilmedi:

var ajaxResponse; 

$.ajax({ 
    async: false, 
    success : function (response) 
       { 
        ajaxResponse = response; 
       }, 
    // other properties 
}); 

return ajaxResponse; 

Tam API here listeleme.

+0

Cevabınız için teşekkür ederim, anlıyorum. Ama sorunumu çözmez. Biraz daha istediğimi açıklamama izin ver. Formumun gönderildiği zaman tetiklenen başka bir işlev içinden checkusernamea işlevini çalıştırıyorum. Yani ne yapıyorum: if (! Checkusernameavailable (username_box.val())) { false; // // formunu göndermeyin ve bazı kutuların kırmızı olmasını sağlayın, çok dilli hata mesajlarının gösterilmesini engelleyin (Hangi - btw - yanıtımı doğrudan html'ye ekleyememem anlamına gelir ...) } –

+0

@ user468893 - Bkz. Düzenle. Async AJAX çağrınızı senkronize etmeniz gerekir. – GenericTypeTea

+0

Zaten oldu, ama bu hile değildi :) Dönüş değeri büyü yaptı. Teşekkürler! –