我在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时崩溃。
现在有什么可以导致这种情况吗?
答案 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,这会导致错误。