Похоже, что функция evalScript в jQuerys вас не устраивает ...
Строка 543 из jQuery:
function evalScript( i, elem ) {
if ( elem.src )
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
else
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
if ( elem.parentNode )
elem.parentNode.removeChild( elem );
}
Вот описание того, что происходит:
JS на главной странице звонит:
$.ajax({
url:"frag.htm",
type:"GET",
success:callBackFunction
})
и GETs frag.htm, который содержит что-то вроде этого:
<html><head><script src="test.js"></script></head><body>Content</body></html>
тогда вызывается ваша функция обратного вызова, которая, вероятно, выглядит следующим образом:
function callBackFunction(data){
$("#ajaxContent").html(data); // <- this is the beginning of your problems...
}
Когда вызывается html (data) функция jQuery, она «очищает» HTML, удаляя любые теги скрипта, а затем вызывает evalScript для каждого из них.
evalScript, как вы можете видеть, не указывает «cache: true», поэтому, когда он проходит через $ .ajax, кеш равен нулю. Когда кеш равен нулю, а dataType имеет значение «script», jQuery устанавливает cache = false.
Итак, чтобы обойти эту проблему, попробуйте следующее:
function callBackFunction(data){
var tempAJAX = $.ajax; // save the original $.ajax
$.ajax=function(s){ // wrap the old $.ajax so set cache to true...
s.cache=true;
tempAJAX(s); // call old $.ajax
}
$("#ajaxContent").html(data); // insert the HTML and download the <script>s
$.ajax = tempAJAX; // reset $.ajax to the original.
}
}
Прежде чем вставить новый HTML-код из «frag.htm» на главную страницу, мы перехватываем все вызовы $ .ajax, модифицируем объект, чтобы включить cache = true, а затем после загрузки сценария вставляем HTML.
Дайте мне знать, если у вас есть какие-либо вопросы.