IE6中的jQuery JSONP问题

Posted

技术标签:

【中文标题】IE6中的jQuery JSONP问题【英文标题】:jQuery JSONP problem in IE6 【发布时间】:2010-09-12 20:25:09 【问题描述】:

我在使用 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”的响应。我尝试将响应类型更改为“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"])

【问题讨论】:

【参考方案1】:

你不会那么喜欢这个响应,但我确信它在你的服务器端。

原因如下:

我已经重新创建了您的场景,当我使用您的 JSONP 响应程序运行时,IE6 挂起,正如您所解释的那样。

但是,当我将 JSONP 响应程序更改为我自己的代码(与您在上面给出的输出完全相同)时,它可以正常工作(在所有浏览器中,尤其是 IE6)。

这是我一起嘲笑的例子:

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

回调到达http://jsbin.com/rs.php?callback=?

小注意 - 我最初怀疑字符串长度:我读过 IE 中的字符串的最大长度为 ~1Mb,这就是你所击中的(我不能 100% 确定这是否准确),但我改变了与数组推送的串联 - 无论如何通常更快。

【讨论】:

我认为你在写作。我已经有一段时间没有深入研究这个问题了,但是我从常规的 ASP.Net aspx 页面获得了 JSON 响应。我想我会更幸运地调用一个实际的网络服务器(.asmx)。谢谢你的建议!安德鲁【参考方案2】:

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

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

【讨论】:

不幸的是,这并没有解决问题。完全相同的问题出现了。我已经更新了我的原始帖子,包括一个您可以自己测试 JSOP 调用的地方。请参阅上面的原始问题。安德鲁 简而言之,这是我的问题。真烦人!【参考方案3】:

您是否在 jslint 进行 json 验证? 如果您有 ur 并包含完整的 jquery 库,我可以为您调试它或发布 json,我可以尝试重新创建问题。仅从提供的信息来看,很难说。 我之前看到过一些奇怪的事情,json 中键的实际名称在 ie6 上会中断。

【讨论】:

我在上面的原始帖子中添加了对此答案的回复。您可以在那里找到 json 响应。【参考方案4】:

您是否尝试过 mime-type: application/x-javascript?

【讨论】:

不幸的是,这没有任何影响。还是不行。

以上是关于IE6中的jQuery JSONP问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:IE6 中的窗口控件存在问题

IE6/7/8 中的 jQuery 菜单问题。链接消失

AngularJS 中的 JSONP 请求不像 jQuery 那样工作

JavaScript 中的跨域请求与 jQuery 的 JSONP

jQuery 中的 .load 未在 IE6 中加载 cfcharts

NPM 模块(节点/浏览器)中的 JSONP 跨域