Bir fonksiyonun geri dönüş olarak jQuery ajax çıktı

3 Cevap php

Ben verildi post / almak parametrelere bağlı olarak bir mysql sonuç döndüren küçük bir php script yarattı. Bu dosya ile şimdi benim veritabanından bir şey almak için jquery.post kullanın ya. Komutu alabilirsiniz.

Komut dosyası her zaman 1 değerini döndürür. Yani veritabanından alınan değer döndüren bir javascript işlevi yapmaya çalıştım.

Bu ben bunu yapmak istiyorum ama olması gerektiği gibi çalışmıyor budur:

function mysql(args) {
    $.post("scripts/ajax_mysql.php",args,function(data) {
        return data;
    });
}

var value=mysql({ table:"user", where:"nickname='test'", get:"email" });

Bu fonksiyon zaten geçildiğinde veri alınır gibi görünüyor. Bunun için bir çözüm var mı?

3 Cevap

Kullanıcı temelde SQL komutu herhangi bir tür oluşturmak ve bu sunucuya göndermek icar sveyaunu bir kenara koyarsak - kveyakunç güvenlik etkileri ile kveyakunç bir fikir, komut ile sveyaun AJAX doğasını anlamak için bir başarısızlıktır.

AJAX çağrı AJAX çağrı tamamlanmadan önce nedenle yöntem dönen uyumsuz olduğunu. Bu ile başa çıkmak için iki yol vardır. Işlevinize bir geri geçmek ve AJAX sonrası tamamlandığında geri çalıştırır. Bu isteğin asenkron doğasını tutar. Alternatif olarak, tam $ kullanabilirsiniz. Ajax () sözdizimi yazı yapmak ve true async parametresini ayarlamak için. Daha sonra işlevi dış blok için kapsamlı bir değişken AJAX isteği sonuçlarını saklamak ve işlevi sonunda iade edebilirsiniz. async true ayarlama temelde jQuery kaputun altında işleme hariç geri arama kullanarak, ne yapar.

function mysql(data, callback) {
     $.post( "scripts/ajax_mysql.php",args,function(data) {
         if (callback) {
            callback(data);
         }
     });
}

mysql({ table:"user", where:"nickname='test'", get:"email" }, function(user) {
     $('#email').val(user.email);
     ...
});

veya

function mysql(data, callback) {
     var value;
     $.ajax({
        url: "scripts/ajax_mysql.php",
        type: 'post',
        async: false,
        data: args,
        success: function(data) {
                    value = data;
                 }
     });
     return value;
}

Mevcut çağrı semantik.

Ajax uyumsuz olduğunu. Işlevini çağırarak bir istek patlar ve ardından program devam.

Isteği geri geliyor ve olay patlar ve ekli bir olay işleyicisi verileri ile ilgilenir zaman.

Bir senkron yapmak için xhr kullanabilirsiniz, ancak bu tavsiye edilmez.

Bir iade değişken olarak geri arama alınan veri ile başa çıkmak için programınızı tasarlayın.

Sorun return data ifadesi mysql işlevinde bir "dönüş" neden olmamasıdır.

Ne yapacağını XMLHttpRequest nesnesini döndürmek mysql fonksiyonu için $.post döner aramak ve daha sonra başarılı bir ajax arama için bir dinleyici ekleyin.