2013-10-09 9 views
0

我有一个页面,其中有一个函数从js文件调用函数。在JavaScript中意外未定义的错误

这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

谢谢

+4

定义了'qc_chat'的位置。如果没有定义,你会得到这个错误。 – PSL

+1

是的,请显示它*的定义*。它不在你的代码中。 –

+0

在qc.js中定义了'qc_chat'吗? – hjpotter92

回答

3

因为$.getScript是异步的,所以依赖于它加载的脚本的任何东西都必须在它的回调函数中完成。因此,它应该是:

$.getScript('qc.js', function() { 
    qc_chat.setup('<?php echo $p; ?>'); 
}); 
+0

可能是'');”>'和'doThat(_p){'和'qc_chat.setup _p)'因为其他代码是一个.js文件 – zzlalani

+0

错误不是shwoing,但我的代码也无法正常工作......这是依赖于该文件。 :( – user2855825

+0

)如果它没有收到错误,那么它正在运行该函数,我无法解释为什么它没有达到你期望的效果。使用JS调试器,在'qc_chat.setup'行设置一个断点,看看发生了什么。 – Barmar

0

当我不能修改其中一些模块连接的地方,我用这个片段:

var waitForqcchat = setInterval(function(){ 
    if(typeof qcchat != 'undefined'){ 
    clearInterval(waitForqcchat); 
    //here I sure, that module connected 
    qcchat.setup('<?=$p?>'); 
    } 
}, 200); 

你也应该写一个逻辑限制等,如果qcchat永远不能连接

+0

它的作品,但它是一个令人难以置信的kludge。学习正确使用回调函数。 – Barmar

+0

同意,这只适用于情况下,当我无法修改/检测脚本连接的地方。放置像'$ .getScript('qc.js')' –