2010-11-18 7 views
1

Merhaba Ajax yayın işleviyle çalışıyorum, veri gönderiyorum ve geri çağırma PHP'den geri dönüyor. Geri verilen verilere dayanarak, karar vermekte ya da ileriye gitmek ya da kullanıcının sayfada kalmasına ve değişiklik yapmasına izin vermekteyim. Ajax geri çağrısına ait geri dönüş verilerine dayanan bir form yükü durdurma

 if (validateStep(step)) 
     { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){if(returndata.match('not Unique'))alert('Contact source already exists'); else if(returndata.match('not posted')){alert("Not posted to the database");return false;}}); 
     } 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
     } 

Burada dönüş verileri "yayınlamadı" eşleştirilir zaman önde gidiyor uygulamayı durdurmak için çalışıyorum ve ben bir uyarı ve işlemi durdurmak için yanlış bir dönüş atma ediyorum. Yine de uygulamayı bir sonraki adıma geçmekten alamıyorum. Yanlış döndürülmesine rağmen, işlem bir sonraki adıma geçer, ancak adımı artıran son 4 satırı yorumladığımda, eylemi ayarlayın ve gönderin, sayfada kalır ve uyarı atılır.

Süreç sürecimi durdurmak için ne yapmam gerektiğini bilen var mı?

cevap

1

AJAX çağrıları asenkrondir. Geri döndüğünüz "yanlış", orada gösterdiğiniz işleyicide değil, başarı geri çağırma üzerindedir. Dolayısıyla, son dört adım daima AJAX çağrısı sunucuya ulaşmadan önce yürütülür. Çok gibi bu başa ajax yanıt geri arama değiştirerek bunu düzeltebilirsiniz:

if (validateStep(step)) 
{ 
    var next_step = function() { 
     step = step + 1; 
     form[0].action = '/app/controller/index/step:'+step; 
     document.getElementById('step').value = step; 
     form[0].submit(); 
    } 

    if(step==1) 
    { 
     var data = document.getElementById('hiddenContact').value; 
     $.post('/app/controller/action', { 'data':data }, function(returndata) { 
      if (returndata.match('not Unique')) alert('Contact source already exists'); 
      else if (returndata.match('not posted')) alert("Not posted to the database"); 
      else next_step(); 
     }); 
    } 
    else next_step(); 
} 
+0

Merhaba Lee, dava için işlemini durdurmak için çalışıyorum 'yayınlamadı'. Yani next_step işlevini çağırırsam, yine de gönderim bölümünü yürütür, değil mi? – macha

+0

@macha, 'next_step()', gönderim işlemini yürütür, ancak gönderdiğim kodda, 'if' ifadesinde 'else' ifadesinde yer alır. Yani sadece ilk iki koşul eşleştiğinde yayınlanacak. Eğer reutrn 'Unique' değilse, yayınlanmamasını mı istiyorsunuz? Gönderdiğim kod, bu hata koşullarından herhangi birinin altında form gönderiminin önleneceğini varsaydı. –

+0

sen adam Lee'sin! çok teşekkürler! – macha

0

prosesiniz IF deyimi dışında bir sonraki adıma devam etmek ve her zaman çalışacaktır.

bunu yapamaz:

if (validateStep(step)) 
    { 
     if(step==1) 
     { 
      var data = document.getElementById('hiddenContact').value; 
      $.post('/app/controller/action', {'data':data}, function(returndata){ 
       if(returndata.match('not Unique')) { 
        alert('Contact source already exists'); 

        step = step + 1; 
        form[0].action = '/app/controller/index/step:'+step; 
        document.getElementById('step').value = step; 
        form[0].submit(); 

       } else if (returndata.match('not posted')){ 
        alert("Not posted to the database"); 
        return false; 
       } 
      }); 
     } 
    } 
+0

Bu, devam etmek istemediğinizde yalnızca yanlış (artık gerekli olmayan) döndüğünüzü varsayar. Yani 'Benzersiz Değil', 'yayınlanmadı' olarak değil, ilerler. –

İlgili konular