2008-09-24 137 views
4

我在使用IE6从不同域中的服务器检索JSONP响应时遇到了问题。IE6中的jQuery JSONP问题

当我使用JSONP向与网页相同域中的服务器进行相同的AJAX调用时,在所有浏览器(包括IE6)中都一切顺利。但是,当我使用JSONP在域(XSS)之间进行呼叫时,Internet Explorer 6会锁定。具体来说,CPU高达100%,并且“成功”回调从未达到。我唯一一次在域之间取得成功的时候是响应非常短(通常少于150字节)。答复的长度似乎很重要。

我正在使用jQuery 1.2.6。我试过$ .getJSON()方法和$ .ajax(dataType:“jsonp”)方法,但没有成功。这在FF3和IE7中运行的很好。我一直无法找到有类似问题的其他人。我认为这种类型的功能在IE6中完全由jQuery支持。

任何帮助是非常赞赏,

安德鲁


这里是为了使AJAX调用 html页面的代码。制作这个文件(和jQuery库)的本地副本,并使用IE6进行拍摄。对我而言,它总是会导致CPU在没有响应的情况下出现尖峰。

<!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(一旦你移除了围绕它的方法调用)。真正的结果会有所不同,但这似乎是最简单的例子,会导致失败。服务器是一个返回类型为“application/json”的响应的ASP.Net应用程序。我已经尝试将响应类型更改为'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挂了,因为你已经解释。 (但在所有浏览器中,尤其是IE6中),它的工作原理没有任何问题。但是,当我将JSONP响应程序更改为我自己的代码时(与上面给出的输出完全相同)。

这是我嘲笑起来的例子:

http://jsbin.com/udako(编辑http://jsbin.com/udako/edit

的回调打击http://jsbin.com/rs.php?callback=?小记 - 我最初怀疑字符串的长度:我读过IE中的字符串,其最大长度为〜1Mb,这就是你所打的(我不是100%确定这是否准确),但是我将连接更改为数组推送 - 无论如何,这通常更快。

0

你json验证在jslint? 如果你有一个ur并包含完整的jQuery lib,我可以为你调试它,或发布json,我可以尝试重新创建问题。从给出的信息来看,这很难说。 我已经看到了一些奇怪的事情与在ie6中打破的json中的键的实际名称。

+0

我在上面的原始文章中添加了对此答案的回复。你可以在那里找到json响应。 – anschoewe 2008-09-25 16:00:19

4

可能完全不相关,但我刚刚发现,在IE6中,当代码从onclick事件处理程序启动时,JSONP回调可能永远不会执行。

此问题的解决方法是通过HREF而不是单击事件附加代码。

+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