У меня есть страница, в которой есть функция, которая вызывает функцию из js файла.
код, который вызывает функцию в js файле:
<script language="javascript" type="text/javascript">
var qc = qc_chat;
window.onload = function()
{
qc.setup('<?php echo $p; ?>');
}
</script>
Я включаю файл qc.js, используя этот код:
function doThat() {
$.ajax({
url: 'http://www.example.com',
type: 'GET',
data: 'adrs='+getHost( document.domain ),
dataType: 'jsonp',
jsonp: false,
jsonpCallback: 'methodCallback',
success: function( data ) {
if( data.message == "yes" ) {
} else {
$.getScript("qc.js"); //files m including using this ajax
$.getScript("tools.js"); //files m including using this ajax
}
},
error: function( error ) {
console.log( error );
}
});
}
и я doThat()
используя <body onload="doThat();">
но я получаю сообщение об ошибке в консоли Uncaught ReferenceError: qc_chat is not defined
благодаря
Поскольку $.getScript
асинхронен, все, что зависит от загружаемого скрипта, должно выполняться в его функции обратного вызова. Так должно быть:
$.getScript('qc.js', function() {
qc_chat.setup('<?php echo $p; ?>');
});
<body onload="doThat('<?php echo $p; ?>');">
и function doThat(_p) {
и qc_chat.setup(_p)
поскольку другой код является файлом .js.
Когда я не могу редактировать место, где подключаются некоторые модули, я использую этот фрагмент:
var waitForqcchat = setInterval(function(){
if(typeof qcchat != 'undefined'){
clearInterval(waitForqcchat);
//here I sure, that module connected
qcchat.setup('<?=$p?>');
}
}, 200);
Вы также должны написать логику для ограничения ожидания, если qcchat никогда не сможет подключиться
$.getScript('qc.js')
qc_chat
. если он вообще не определен, вы получите эту ошибку.