2015-04-24 15 views
6

Bazı bilgileri almak için bir PHP-Script dosyasına AJAX aracılığıyla bazı bilgiler yolluyorum. Şimdiye kadar sorun yok. Ancak kullanıcı oturumu kapatırsa, sonuç false olur ve giriş formuna sahip bir model görüntülenir.Oturum açıldıktan sonra AJAX isteğini yineleyin

Kullanıcı giriş yaptıysa, ilk gönderim kabul edilmedikçe ilk bilgi (var data) bir kez daha gönderilmelidir.

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showModal("login"); return; 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 

ShowModal fonksiyonu da bir ajax isteği bağlanır, böylece kullanıcının bu ... İlk veri olmalı Bundan sonra bir kez daha göndermek açmış oluyor ...

function showModal() { 
    $('body').append('<form>...'); // Show Modal with form to login 
} 

// With submit form, the user will be logged in 
$('body').on('submit','#loginform',function(event){ 
$.ajax({ 
    url: "login.php", 
    type: "POST", 
    data: { 'username': username, 'password': password }, 
    dataType: "json" 
}) 
.done(function(json) { 
    // User is now logged in 
    // Now repeat first request 
}); 
}); 
+0

gelen ajaxOptions geçmektedir? – Kyojimaru

+0

ajax aramasını ayrı bir işleve sarın ve koşullar başarısız olduğunda tekrar arayın. – wahwahwah

+0

Verileri kaydetmek istiyorsanız, bunu bir "cookie" veya "localStorage" içine saklayabilir ve @ RaphaelMüller tarafından önerilen işlev için bir parametre olarak kullanabilirsiniz. – empiric

cevap

4

koyun Kodunuzu bir işlev içinde. İhtiyacınız olduğunda bir işlevini çağırabilirsiniz:

var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      showModal("login"); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

// now run sendData() when you want to trigger it 

nerede ikinci kez giriş (ShowModal) nasıl çalıştığını bağlıdır sendData() aramak için. 'Başarılı giriş' olayını yakalamanın bir yolunu bulun.


Sen showModal işleve sendData geçmek ve orada diyebiliriz. Bu şekilde showModaldata hakkında hiçbir şey bilmek gerekmez: ShowModal tanımlanır

Sonra
var sendData = function() { 
    $.ajax({ url: "script.php", type: "POST", data: data, dataType: "json" }) 
.done(function(json) { 
     if (json.result === false) { 
      // The function sendData is passed as a parameter - will be called after a successful login 
      showModal("login", sendData); return; 
     } 
     else { 
      $('#result').html(json.result); 
     } 
    }); 
}; 

:

function showModal(dialog, loginCallback) { 
    $('body').append('<form>...'); // Show Modal with form to login 
    // With submit form, the user will be logged in 
    $('#loginform').on('submit', function(event) { 
     $.ajax({ 
      url: "login.php", 
      type: "POST", 
      data: { 'username': username, 'password': password }, 
      dataType: "json" 
     }) 
     .done(function(json) { 
      // User is now logged in 
      // Now repeat first request 
      loginCallback(); 
     }); 
    }); 
} 
+0

Lütfen güncellenmiş gönderiye bir göz atın. Bu şekilde giriş yapılır ... – user3142695

+0

Tamam, 'done' geri aramasının içinde' sendData() 'ı çalıştırabilmelisiniz. –

+0

Oturum açma işlemini nasıl yaptığımı göstermek için yayını güncelledim. Bunu optimize edebileceğimi düşünün ... – user3142695

1

Sen ajax Options gibi başka argüman kabul etmek ShowModal işlevi olabilir. Eğer ajax seçenekleri tanımlanmışsa, sadece bunları bitmiş olarak adlandırın.

function showLoginModal(ajaxOptions){ 
    $.ajax({ 
     url: "login.php", 
     type: "POST", 
     data: { 'username': username, 'password': password }, 
     dataType: "json" 
    }) 
    .done(function(json) { 
     if(ajaxOptions!== undefined){ 
      $.ajax(ajaxOptions); 
     } 
    }); 
} 

Ardından çağrı fonksiyonunun kullanıcı oyuna girişi tetiklenir kodu ne

$.ajax({ 
url: "script.php", type: "POST", data: data, dataType: "json" 
}) 
.done(function(json) { 
    if (json.result === false) { 
     showLoginModal(this); 
    } 
    else { 
     $('#result').html(json.result); 
    } 
}); 
+0

Bu yüzden, Raphael tarafından gösterildiği gibi 'sendData' adlı yeni bir fonksiyon tanımlayabilir ve eğer' if (ajaxOptions! == undefined) {'içinde bu işlevi çağırırdım. Sağ? – user3142695

+0

Sadece bir işleviniz varsa, bu işlevselliğe gereksinim duyan sendData diyorsanız, o zaman onu showModal'ın içinden doğrudan aramak iyi olur.Fakat ajax çağrılarının çoğunda veya hepsinde aynı şeye ihtiyacınız varsa o zaman amox seçeneklerini showModal'a iletmek ve koşulu içinde $ .ajax (geçti) kullanmak daha iyi olacaktır. – wonderbell

+0

Tamam, yazıyı güncelledim. Çünkü showModal sadece modal gösterir. Giriş verilerini göndermek için bir gönderim olayı bağlarım. Yani sürecin ortasında modalShow() ile veriyi nasıl bağlayacağımı bilmiyorum ... – user3142695

İlgili konular