IE6中的jQuery JSONP问题
使用IE6从其他域中的服务器检索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(一旦删除围绕它的方法调用)。实际结果会有所不同,但这似乎是导致失败的最简单示例。该服务器是一个ASP.Net应用程序,返回类型为" application / json"的响应。我尝试将响应类型更改为"应用程序/ javascript"和"应用程序/ 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"])
解决方案
我们在jslint上验证json吗?
如果我们有ur并包含完整的jquery lib,我可以为我们调试它或者发布json,然后我可以尝试重新创建问题。仅从给出的信息来看就很难说了。
在IE6上中断的json中,我已经看到了键的实际名称,这之前有些奇怪的事情。
可能是完全无关的,但我刚刚发现,在IE6中,当从onclick事件处理程序启动代码时,JSONP回调可能永远不会执行。
解决此问题的方法是通过HREF而不是click事件添加代码。
我们是否尝试过mime-type:application / x-javascript?
我们不会非常喜欢此响应,但是我确信它在服务器端。
原因如下:
我已经重新创建了方案,并且当我们使用JSONP响应器运行时,正如我们所解释的,IE6挂起了。
但是,当我将JSONP响应器更改为自己的代码(与上面提供的输出完全相同)时,它就可以正常工作(在所有浏览器中,尤其是IE6)。
这是我一起嘲笑的示例:
http://jsbin.com/udako(编辑http://jsbin.com/udako/edit)
回调击中http://jsbin.com/rs.php?callback=?
小提示,我最初怀疑字符串的长度:我已经知道IE中的字符串的最大长度为〜1Mb,这就是我们要命中的长度(我不确定100%是否正确),但是我将串联改为数组推送通常反而更快。