Frage

Beim Abrufen einer JSONP-Antwort von einem Server in einer anderen Domäne mit IE6 ist ein Problem aufgetreten.

Wenn ich denselben AJAX-Aufruf mit JSONP an einen Server in derselben Domäne wie die Webseite sende, funktioniert alles in allen Browsern (einschließlich IE6) einwandfrei.Wenn ich jedoch mit JSONP Anrufe zwischen Domänen (XSS) tätige, stürzt Internet Explorer 6 ab.Konkret steigt die CPU-Auslastung auf 100 %, und der „Erfolgs“-Callback wird nie erreicht.Nur wenn die Antwort sehr kurz ist (normalerweise weniger als 150 Byte), hatte ich beim Wechsel zwischen Domänen Erfolg.Die Länge der Antwort scheint wichtig zu sein.

Ich verwende jQuery 1.2.6.Ich habe die Methode $.getJSON() und die Methode $.ajax(dataType:„jsonp“)-Methode ohne Erfolg.Das funktioniert wunderbar in FF3 und IE7.Ich konnte niemanden mit einem ähnlichen Problem finden.Ich dachte, dass diese Art von Funktionalität von jQuery im IE6 vollständig unterstützt wird.

Jede Hilfe wird sehr geschätzt,

Andreas


Hier ist der Code für die HTML-Seite, die den AJAX-Aufruf durchführt.Erstellen Sie eine lokale Kopie dieser Datei (und der JQuery-Bibliothek) und probieren Sie es mit IE6 aus.Bei mir führt es immer zu einem CPU-Spitzenanstieg, ohne dass eine Antwort gerendert wird.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <script type="text/javascript" src="Scripts/jquery-1.2.6.min.js"></script>
    <script type="text/javascript" src="http://devhubplus/portal/search.js"></script>
</head>
<body>
<a href="javascript:test1(500, 'wikiResults');">Test</a>
<div id="wikiResults" style="margin-top: 35px;"></div>

<script type="text/javascript">
    function test1(count, targetId)
    {
        var dataSourceUrl = "http://code.katzenbach.com/Default.aspx?callback=?";
        $.getJSON(dataSourceUrl, {c: count, test: "true", nt: new Date().getTime()}, function(results) {
                var response = new String();
                response += "<div>";
                for(i in results)
                {
                    response += results[i];
                    response += " ";

                }
                response += "</div>";
                $("#" + targetId).html(response);
        });
    }


</script>
</body>
</html>

Hier ist der JSON, der in der Antwort zurückkommt.Laut JSLint handelt es sich um gültiges JSON (sobald Sie den umgebenden Methodenaufruf entfernen).Die tatsächlichen Ergebnisse würden anders ausfallen, aber dies schien das einfachste Beispiel zu sein, das zum Scheitern führen würde.Der Server ist eine ASP.NET -Anwendung, die eine Antwort vom Typ 'Application/JSON' zurückgibt. Ich habe versucht, den Antworttyp in "Anwendung/JavaScript" und "Anwendung/X-JavaScript" zu ändern, aber es hatte keinen Einfluss.Ich schätze die Hilfe wirklich.

jsonp1222350625589(["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18"

,"19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38"

,"39","40","41","42","43","44","45","46","47","48","49","50","51","52","53","54","55","56","57","58"

,"59","60","61","62","63","64","65","66","67","68","69","70","71","72","73","74","75","76","77","78"

,"79","80","81","82","83","84","85","86","87","88","89","90","91","92","93","94","95","96","97","98"

,"99","100","101","102","103","104","105","106","107","108","109","110","111","112","113","114","115"

,"116","117","118","119","120","121","122","123","124","125","126","127","128","129","130","131","132"

,"133","134","135","136","137","138","139","140","141","142","143","144","145","146","147","148","149"

,"150","151","152","153","154","155","156","157","158","159","160","161","162","163","164","165","166"

,"167","168","169","170","171","172","173","174","175","176","177","178","179","180","181","182","183"

,"184","185","186","187","188","189","190","191","192","193","194","195","196","197","198","199","200"

,"201","202","203","204","205","206","207","208","209","210","211","212","213","214","215","216","217"

,"218","219","220","221","222","223","224","225","226","227","228","229","230","231","232","233","234"

,"235","236","237","238","239","240","241","242","243","244","245","246","247","248","249","250","251"

,"252","253","254","255","256","257","258","259","260","261","262","263","264","265","266","267","268"

,"269","270","271","272","273","274","275","276","277","278","279","280","281","282","283","284","285"

,"286","287","288","289","290","291","292","293","294","295","296","297","298","299","300","301","302"

,"303","304","305","306","307","308","309","310","311","312","313","314","315","316","317","318","319"

,"320","321","322","323","324","325","326","327","328","329","330","331","332","333","334","335","336"

,"337","338","339","340","341","342","343","344","345","346","347","348","349","350","351","352","353"

,"354","355","356","357","358","359","360","361","362","363","364","365","366","367","368","369","370"

,"371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387"

,"388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404"

,"405","406","407","408","409","410","411","412","413","414","415","416","417","418","419","420","421"

,"422","423","424","425","426","427","428","429","430","431","432","433","434","435","436","437","438"

,"439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455"

,"456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472"

,"473","474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489"

,"490","491","492","493","494","495","496","497","498","499"])
War es hilfreich?

Lösung

Sie sind nicht diese Antwort so viel gerne gehen, aber ich bin überzeugt, dass es auf dem Server-Seite ist.

Hier ist der Grund:

Ich habe Ihr Szenario neu erstellt und wenn ich mit Ihrem JSONP Responder betreibe ich IE6 hängen zu bekommen, wie Sie erklärt haben.

Allerdings, wenn ich die JSONP Responder zu meinem eigenen Code zu ändern (genau die gleiche Leistung wie Sie haben oben geben) funktioniert es ohne Problem (in allen Browsern, vor allem aber IE6).

Hier ist das Beispiel, das ich verspottet zusammen:

http://jsbin.com/udako (bearbeiten http://jsbin.com/udako/edit )

Der Rückruf trifft http://jsbin.com/rs.php?callback=?

Kleine Anmerkung - ich zunächst die Stringlänge vermutet: Ich habe gelesen, dass Strings in IE eine maxlength von ~ 1 MB hat, das ist, was Sie schlagen (ich bin nicht 100% sicher, ob dies richtig ist), aber ich geändert die Verkettung an ein Array Push -., die ohnehin im allgemeinen schneller ist

Andere Tipps

Mag völlig unabhängig sein, aber ich habe gerade herausgefunden, dass in IE6 ein JSONP-Rückruf möglicherweise nie ausgeführt wird, wenn Code von einem Onclick-Ereignishandler initiiert wird.

Die Lösung für dieses Problem besteht darin, den Code über eine HREF anstelle des Klickereignisses anzuhängen.

Hat Sie json validieren unter JSLint ? Wenn Sie einen ur und umfassen das volle jquery lib haben kann ich es für Sie debuggen oder die json posten und ich kann versuchen, das Problem neu zu erstellen. Nur von der Info ist es ziemlich schwer zu sagen gegeben. Ich habe einige seltsame Dinge gesehen, bevor sie mit den tatsächlichen Namen der Schlüssel in der json, die auf IE6 bricht.

Haben Sie versucht, MIME-Typ: application / x-javascript

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top