带有指定jsonpCallback的jQuery 1.4.2 $ .ajax崩溃了IE6 / 7

时间:2010-06-15 15:44:50

标签: jquery crash jsonp internet-explorer-6 internet-explorer-7

我在here之前发布了一个类似的线程,但经过进一步调查后我发现问题出在$ .ajax jsonpCallback参数上。

在下面的简单代码中,每次第二次请求都会崩溃(缓存问题?)

<html>
<head>
 <title>Hello world</title>
</head>
<body>
 <span id="ClickMe">Click Me</span>
</body>
<script src="http://code.jquery.com/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
 $(document).ready( function() {
  //console.log('Init');
  alert('asdasd');
  $("#ClickMe").click( function() {
   $.ajax({     
    url: 'http://URL-THAT-CAN-HANDLE-DIFFERENT-CALLBACK-NAMES',
    dataType: 'jsonp',
    jsonpCallback: 'myCustomCallback',
    success: function(data) {

    }
   });
  });

 });
</script>
</html>

此代码将导致IE6和IE7在第二次点击Click Me-span时崩溃。

现在有什么可以导致这种情况吗?

2 个答案:

答案 0 :(得分:1)

我不确定这里发生了什么,但这种情况是http://code.google.com/p/jquery-jsonp/派上用场的地方:)

答案 1 :(得分:0)

当您设置jsonpCallback属性时,jQuery会将以下代码添加到您的文档中,因此jsonp在全局范围内可以调用。那段代码是这样的

window['myCustomCallBack'] = function(args){
   success(args); //really more complicated than this because success may not be in scope
   delete window['myCustomCallBack'];
}

当您多次调用此方法时,在创建文档['myCustomCallBack']和删除它之间存在竞争条件。 jsonp响应可能会返回并且已经删除了myCustomCallBack,这会导致错误。