2011-08-10 2 views
0

Я пытаюсь загрузить плагин шаблона jQuery с помощью jQuery.getScript, но даже если он делает запрос и файл поступает правильно (заменил URL-адрес тестовым JS и javascript правильно оценивается), jQuery. tmpl все еще не определено, но если я запустил jQuery.tmpl в консоли Chrome, это функция.Включить плагины jQuery с .getScript()?

Пример кода:

<script type="text/javascript">  
jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js'); 
console.log(jQuery.tmpl); // returns undefined. 
</script> 

Любая идея, что может быть проблема?

ответ

3

Вы должны ждать до тех пор, пока будет загружен скрипт.

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', 
    function(){ 
     console.log(jQuery.tmpl); 
    } 
); 
+0

не против меня, имел в виду, чтобы изменить мою. :) – Shaz

+0

Сначала был действительно удивлен :) – bjornd

0

Вы shuold использовать его в обратного вызова (обработчик успеха) метод getScript

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', 
function(){ 
    console.log(jQuery.tmpl); 
}); 
0

Ваша проблема в том, что скрипт загружается асинхронно, что означает, что вы должны ждать его завершения, прежде чем вы можете использовать его ,

http://api.jquery.com/jQuery.getScript/

Решение должно иметь следующее:

$.getScript('.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function (data, textStatus) { 
    //Use the script now 
}); 

Я бы рекомендовал просто добавить ссылку на скрипт на странице, если вы собираетесь это нужно немедленно.

0

Вам нужно обернуть, что в функции обратного вызова, как следующий оператор выполняет сразу, в то время как нагрузка сценария может занять некоторое время .:

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function() { 
    console.log(jQuery.tmpl); 
}); 
2

Ждут, пока не загрузится. Попробуйте использовать:

jQuery.getScript('http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js', function() { 
    console.log(jQuery.tmpl); 
}); 

или сделать его более удобным для чтения, попробуйте использовать:

$.ajax({ 
    url: "http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js", 
    dataType: "script", 
    success: function() { 
     console.log(jQuery.tmpl); 
    } 
}); 
0

Я в конечном итоге просто сделать синхронизацию .ajax вызова, так что я мог бы использовать его как часть моей логики потока :

jQuery.ajax({ 
    url: script, 
    async: false, 
    dataType: "script", 
    success: function() { 
     console.log("Loaded "+script); 
    }, 
    complete: function() { 
     console.log("Failed to load "+script); 
    } 
}); 
Смежные вопросы