2009-03-10 11 views
3

yerel klasörde bir pageTest.html var, bu sayfa service.ashx çağrı i = ... (yani geri dönüş değeri param +1 artırılır geçirdiğine) ile Ajax kodu izleyin:Ajax senkron geri aramaları

. 
. 
getIncr: function(parameters, success){ 
     $.ajax({ 
       async: false, 
       type: methodType, 
       url: getTarget, 
       data: "n="+parameters, 
       dataType:"jsonp", 
       success: success 
      }); 
    } 
. 
. 

html sayfası çağrı m kez bu fonksiyonu (komut dosyası ile ..): sayfa yükleme sırasında

.  
    var start = function(){ 
    . 
    . 
    var val = 0; 
    .  
    . 
    for(i=0; i<m; i++) 
    { 
     Foo.getIncr(val, function(returned_n){ 
      val = returned_n; 
     }); 

    } 

}; 

, görüşmeleri "uyumsuz modunda" yürütme vardır ama ayar "zaman uyumsuz: false" Ajax . Bu sorunu okudum ve nedenini buldum, yani Ajax, farklı etki alanındaysa, page.html'den service.ashx öğesine çağrıyı eşzamanlayamaz. Bu service.ashx (farklı etki alanında) için page.html Synch çağrısı yürütmek için bir çözüm var mı?

+3

Sert, İngilizce, Domenico'nun ilk dili değildir. Ve ben bunu iyi anladım. –

+0

Herhangi bir ikinci dilde, bu konuda yardımcı olacağım ... Thx Domenico! – Cody

cevap

6

Eh, sorun senkron JSONP isteklerini yapamaz olmasıdır. Uygulandığı şekilde, Andy'nin de belirttiği gibi, "script tag hack" adı verilen bir yöntemle. Bir komut dosyası etiketinin doldurulmasını beklerken jQuery'in javascript uygulamasının yürütülmesini durdurabileceği bir yol yoktur.

Yani JSONP isteği yapmak için jQuery'nin doğru yöntemini çağırıyorsunuz, ancak JSONP olduğundan, eşzamansız seçenek uygulanmadı ve çevresinde bir yol yok. İsteğinizi senkronize olmayan bir şekilde ele almanız gerekiyor.

Bir yan not, yine de .amax'ı eşzamanlı modda kullanmak iyi bir fikir değil. İsteğin tamamlanması çok zaman alırsa, tarayıcı duraklar ve kullanıcı, sayfanın yanıt vermediğini söyleyen bir pop-up alır.