不能让脚本推迟

时间:2012-03-12 23:00:00

标签: php javascript ajax deferred-loading

我有以下脚本在我的网站上生成大约4000行代码:

<script language="javascript" type="text/javascript">
<!--
var makemods2 = new Array;
<?php
$i = 0;
foreach ($makemods2 as $k=>$items) {
foreach ($items as $v) {
echo "makemods2[".$i++."] = new Array( '$k','".addslashes( $v->value )."','".addslashes( $v->text )."' );\n\t\t";
}
}
?>
//-->
</script>
<?php } ?>

这对页面加载非常重要,所以当然我想推迟解析。但是因为它不是外部的,所以我不能使用defer = defer。

我还阅读了谷歌的提示,提示这样的语法,我不知道如何编写上述代码:

<script language="javascript">
var node2 = document.createElement('script');
node2.type = 'text/javascript';
node2.async = true;
function switchDynaList2(listname,source,key,orig_key,orig_val){var list=eval("document.moduleForm."+listname);for(i in list.options.length){list.options[i]=null}i=0;for(x in source){if(source[x][0]==key){opt=new Option;opt.value=source[x][1];opt.text=source[x][2];if(orig_key==key&&orig_val==opt.value||i==0){opt.selected=true}list.options[i++]=opt}}list.length=i}
</script>

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

AJAX是要走的路,但是你似乎想避免我建议:

方法1

回到AJAX之前的一天以及页面加载状态的处理,我们过去常常将脚本标签放在body标签的末尾。这将允许解析主体内容,而不会被脚本执行延迟。然后,您需要做的就是将您的下拉列表默认为禁用,并在脚本执行完后启用它们。

注意:

  • 可能会出现一些样式问题。
  • 这种方法被认为已被弃用。

方法2

将PHP代码移动到其自己的页面中,并使用脚本标记的src属性包含脚本。然后,您可以在脚本标记上使用defer属性。