2011-01-19 4 views
8

XDomainRequest (IE8) kullanarak json'u döndüren bir hizmete eşzamansız çağrı yapmaya çalışıyorum. Sorun şu ki, her zaman bir hata alıyorum (onerror olayı tetiklendi ve responseText her zaman boştur), hizmetin yanıtını kontrol etmek için kemancıyı kullanıyorum ve doğru görünüyor (json object returnig'i görebilirim), Bu sadece XDomainRequest kullanırken IE8'de gerçekleşir, JQuery'de uygulanan aynı işlevsellik iyi çalışır.XDomainRequest problem

Herhangi bir ipucu takdir edilecektir. Teşekkürler!

P.S. .: Bu benim javascript kodu şudur: istekte bulunan URL olabilir -Üstbilgi hizmet Erişim Control-Allow-Origin gönderiyor emin

..... 
    if (jQuery.browser.msie && window.XDomainRequest) { 
    //Use Microsoft XDR 
    var xdr = new XDomainRequest(); 
    xdr.open("post", url); 
    xdr.onload = function() { 
     alert("Loading"); 
     alert(xdr.responseText); 
    }; 
    xdr.onsuccess = function() { 
     alert("Success!"); 
     alert(xdr.responseText); 
    }; 
    xdr.onerror = function() { 
     alert("Error!"); 
     alert(xdr.responseText); 
    }; 
    xdr.onprogress = function() { 
     alert("Progress"); 
     alert(xdr.responseText); 
    }; 
    xdr.timeout = 1000; 
    xdr.send("data: " + escape(data)); 
    var response = xdr.responseText; 
} else ..... 

cevap

8

musunuz?

+0

sayesinde! Bu başlığı eklemeyi unuttum. – GiaNU

+0

teşekkürler! Ben ** Erişim-İzin-Kontrol-Menşe ** hata – Sam

+0

lütfen açıklayınız. – Amit

4

Andre Pedroso Bir yaşındaki sonrası ,, hala orada GiaNU ?! xdr.onsuccess adlı kullanıcıyı arıyorsunuz, fakat bu yöntemin mevcut olduğunu düşünmüyorum. xdr.onload, jQuery'nin AJAX "başarı" işlevine eşdeğer gibi görünüyor.

Bu X-Domain şeyler oldukça yeni ama şimdi burada MS edinilebilir çok güzel bir çalışma modeli vardır: AJAX - Introducing Cross-domain Request (XDR)

Bir şey yapmak için alamayan xdr.ontimeout ama bulmuyorum henüz bir ihtiyaç var :) İlk önce w/jQuery'yi çalıştırıyorum ve şimdi MS postasının ie9 thank'ını alıyorum.

XDR benim şimdiki uygulamanın zamanlaması ile bazı sorunlar vardır ve başa çıkacağımızı bir zaman aşımı kullanılır: Eğer o zaman "erişimi- Cassini aracılığıyla hizmet çalıştırıyorsanız

xdr.onload = setTimeout(function(){ doIt(xdr.responseText), 2000}); 
+0

Ben tabii ki, hala buradayım). Cevabınız için teşekkürler! – GiaNU

+0

Teşekkürler, bu tam olarak ihtiyacım olan çözümdü! – markyd13

+0

setTimeout yardımcı olmaz. gerçek sorun açık bekleyen bir isteği var ise IE8 çöp XDomainRequest toplayabilir olmasıdır. SetTimeout çağrınıza bakarsanız, çöp toplayıcısını biraz daha uzun süre önlemek için XDR değişkenini yakalarsınız - sadece sorunu taşır. Burada geçici çözümlerle ayrıntılı bir yanıt gönderdim: http: // stackoverflow.com/sorular/8058446/ie-xdomainrequest-not-hep-iş – ShadowChaser

1

Başka yakaladım olduğunu Denetim-İzin-Kökeni "başlık, Cassini bunu tanımıyor gibi iade edilmeyecek. Servis çağrılarımızın bir test sunucusunda çalıştığı ancak yerel olarak çalışmadığı bir senaryo vardı. Hizmetin yerel dev makinemizde Cassini'de barındırıldığı, ancak test sunucusunda IIS üzerinde barındırıldığı ortaya çıkıyor.

Ayrıca burada ihtiyaç duyan herkes için ayarı web.config var (not: bu bir alandan gelen erişim sağlar - "*"):

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer>