在初始页面加载时通过Ajax加载内容的设计模式

在初始页面加载时通过Ajax加载内容的设计模式

问题描述:

在调用ajax启动长时间运行的任务之前,我需要完全呈现一个屏幕。即在加载之前加载布局需要10秒以上的报告(依赖于Web服务)。在初始页面加载时通过Ajax加载内容的设计模式

我可以通过向页面添加一个单独的脚本并在该脚本加载时调用Ajax来做到这一点,但这是最好的设计吗?例如。

_myreport.js:

$(document).ready(function() { 

    var report = { 
     load: function() {  
      //test for report-container and run Ajax load if it exists 
     } 
    } 

    report.load(); 
}); 

我可能有这几页,我特别不喜欢有多个不同的页面的多个脚本。或者,当可能或可能不需要Ajax调用(并且容器可能存在或不存在)时,我可能希望跨多个页面重新使用脚本。我可以在运行Ajax之前检查容器的存在,但对我来说这并不像一个好的设计。我希望在需要时调用它,而不是在每个页面加载时调用它,然后通过现有容器测试它是否适用。

我试图把一个小调用该函数体内的容器后,但这会导致错误的report.load()功能尚未定义:

template.phtml

<div id='report-container'></div> 
<script> 
$(document).ready(function() { 
    report.load(); 
}); 
</script> 

什么是这样做的通用/标准和干净的方式,我可以跨多个应用程序重用?

report.load尚未定义,因为它在$(document).ready中变形。 您正试图在报表容器加载完之后但在整个DOM之前调用它。 如果你声明你的ajax加载函数在$(document).ready之外,它将是可用的。 与调用它相同,你正在运行一个脚本后div加载,但因为它包裹在$ .ready,而不是马上执行,它等待其余加载... 这样的事情应该工作

// not wrapped in $(document).ready 
var report = { 
    load: function() { 
     // not sure if you need to test for container, this function is called after it loads 
     //run Ajax 
    } 
} 

<div id='report-container'></div> 
<script> 
// not wrapped in $(document).ready 
report.load(); 
</script> 
+0

谢谢 - 你能解释为什么(这是一个普遍的问题),当它依赖于外部库时,javascript可以在主体中运行 - 在所有外部JS脚本被加载和解析后,JS中是否只运行? – DaveO 2014-10-04 02:02:04

+0

那么,到DOM操作库的链接(如jquery)通常包含在头部,因此它们将首先加载。当任何东西从身体上被调用时,它就会被使用。 – Beckafly 2014-10-04 07:33:37

+0

感谢Byaxy,在这里也找到更多信息:http://stackoverflow.com/a/8996894/422611 – DaveO 2014-10-04 10:15:00