2008-09-24 7 views
4

У меня возникла проблема при получении ответа JSONP с сервера в другом домене с использованием IE6.jQuery Проблема JSONP в IE6

Когда я делаю тот же вызов AJAX с использованием JSONP на сервере в том же домене, что и веб-страница, все идет хорошо во всех браузерах (включая IE6). Однако, когда я делаю вызовы между доменами (XSS) с помощью JSONP, Internet Explorer 6 блокируется. В частности, процессор достигает 100%, а обратный вызов «успеха» никогда не достигается. Единственный раз, когда у меня был успех между доменами, - когда ответ очень короткий (обычно менее 150 байт). Длительность ответа кажется важной.

Я использую jQuery 1.2.6. Я пробовал метод $ .getJSON() и метод $ .ajax (dataType: "jsonp") без успеха. Это прекрасно работает в FF3 и IE7. Я не смог найти кого-либо другого с подобной проблемой. Я думал, что этот тип функциональности полностью поддерживается jQuery в IE6.

Любая помощь очень ценится,

Эндрю


Вот код HTML страницы делает вызов AJAX. Создайте локальную копию этого файла (и библиотеки jquery) и сделайте снимок с помощью IE6. Для меня это всегда заставляет процессор всплескить без ответа.

<!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> 

Вот JSON, который возвращается в ответ. Согласно JSLint, это действительно JSON (после удаления вызова метода, окружающего его). Реальные результаты будут разными, но это было похоже на самый простой пример, который привел бы к неудаче. Сервер представляет собой приложение ASP.Net, возвращающее ответ типа «application/json». Я попытался изменить тип ответа на «application/javascript» и «application/x-javascript», но это не повлияло. Я очень ценю помощь.

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"]) 

ответ

5

вам не понравится этот ответ, но я убежден, что это на вашей стороне сервера.

Вот почему:

Я воссоздал свой сценарий, и когда я бегу с JSONP ответчику я IE6 висит, как вы объяснили.

Однако, когда я меняю ответчик JSONP на свой собственный код (точно такой же вывод, как вы указали выше), он работает без каких-либо проблем (во всех браузерах, но особенно в IE6).

Вот пример, который я издевался вместе:

http://jsbin.com/udako (редактировать http://jsbin.com/udako/edit)

Обработчик бьет http://jsbin.com/rs.php?callback=?

Небольшая записка - изначально я подозревал, что длина строки: я читал, что строки в IE имеют максимальную длину ~ 1 Мб, что и было то, что вы нажимали (я не уверен на 100%, если это точно), но я изменил конкатенацию на массив, который, как правило, быстрее.

0

Вы подтверждаете ли вы json на jslint? Если у вас есть ур и включает полную jquery lib, я могу отлаживать ее для вас или публиковать json, и я могу попытаться воссоздать проблему. Просто из информации, о которой идет речь, трудно сказать. Я видел некоторые странные вещи раньше с фактическими именами ключей в json, который разбивается на ie6.

+0

Я добавил ответ на этот ответ в моем первоначальном сообщении выше. Вы можете найти ответ json. – anschoewe 2008-09-25 16:00:19

4

Может быть полностью несвязанным, но я только что обнаружил, что в IE6, когда код инициируется обработчиком события onclick, ответный вызов JSONP никогда не будет выполнен.

Исправление этой проблемы заключается в том, чтобы прикрепить код через HREF вместо события click.

+0

К сожалению, это не устранило проблему. Точно такая же проблема возникает. Я обновил свое оригинальное сообщение, чтобы включить место, где вы можете проверить вызов JSOP для себя. Пожалуйста, смотрите оригинальный вопрос. Andrew – anschoewe 2008-09-30 19:05:17

+0

Это была моя проблема в двух словах. Как очень раздражает! – 2009-08-10 13:59:06

0

Вы пробовали mime-type: application/x-javascript?

+0

К сожалению, это не повлияло. Это все еще не работает. – anschoewe 2008-10-06 19:29:45