Я хотел бы использовать RequireJS для загрузки jQuery (модуль, который я разрабатываю, должен работать в неконтролируемой среде, где jQuery может быть уже инициализирован), но есть некоторые проблемы, когда требуются разные версии jQuery. Результаты неожиданны. Внутри требуемого функционального блока версия jQuery является случайной. Что не так? Вот код для иллюстрации проблемы:
<!DOCTYPE html>
<html>
<head>
<script data-main="scripts/main" src="http://ajax.cdnjs.com/ajax/libs/require.js/0.24.0/require.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
</head>
<body>
<script>
console.log(jQuery.fn.jquery);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},1000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},2000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
console.log($.fn.jquery);
});
},3000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},4000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},5000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},6000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"], function() {
console.log($.fn.jquery);
});
},7000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.js"], function() {
console.log($.fn.jquery);
});
},8000);
setTimeout(function(){
require(["http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"], function() {
console.log($.fn.jquery);
});
},9000);
</script>
</body>
</html>
Результаты:
1.6.2
1.8.0
1.4.4
1.8.0
1.8.0
1.6.2
1.6.2
1.6.2
1.6.2
1.6.2
require()
асинхронна? Если это так, нет никакой гарантии, что ваши операторы console.log будут выполняться в том же порядке, в котором они написаны. - person Anthony Grist   schedule 17.08.2012