0

Я разместил аналогичную нить до here, но после дальнейшего исследования я обнаружил, что проблема связана с параметром $ .ajax jsonpCallback.

В следующем простом коде он падает каждый раз, когда на 2-й запрос (проблема кэшем?)

<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 аварии на 2-й клик на Click Me пролёта.

Кто-нибудь может это объяснить?

ответ

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 уже, это приводит к ошибкам.

+0

Интересно, это IE-специфический или почему мы не видим такого же поведения в других браузерах? –