Php 无法使脚本延迟

Php 无法使脚本延迟,php,javascript,ajax,deferred-loading,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','".

我有以下脚本,在我的网站上生成大约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>

var node2=document.createElement('script');
node2.type='text/javascript';
node2.async=true;
函数开关dynalist2(listname,source,key,orig_key,orig_val){var list=eval(“document.moduleForm.+listname”);for(list.options.length){list.options[i]=null}i=0;for(x-in-source){if(source[x][0]=key){opt opt new opt opt;opt.value=source[x][1];opt text=source[x][2];if(orig_-key==key&orig_-val==opt opt opt.value}124; i=true}options}}list.length=i}

有什么建议吗?

AJAX是一个不错的选择,但您似乎希望避免这样做,我建议:

方法1

回到AJAX和处理页面加载状态的前一天,我们习惯于将脚本标记放在body标记的末尾。这将允许解析正文内容,而不会因脚本执行而延迟。然后,您需要做的就是将下拉列表默认为禁用,并在脚本完成执行时启用它们

注意:

  • 可能会出现一些样式问题
  • 有些人认为这种方法不可取
方法2


将PHP代码移动到它自己的页面中,并使用script标记的src属性包含脚本。然后可以在脚本标记上使用“延迟”属性。

您的最终目标是什么?也许您可以使用AJAX一次显示一些信息,而不是将整个内容转储到页面中?您永远不会将内容分配给
node2
。你对它有什么期望?最终目标是在这个网站上:你可以在左手边看到下拉列表。我们正在装载大约400个船品牌和4000个模型。我不是ajax的天才,我让一个开发人员做了这件事,但当问他知道他做不到时,将javascript放在body标记的末尾仍然非常有用。事实上,仍然强烈建议这样做。我很难将其放在页面底部,因为它是在Joomla中调用的模块。要将其放在PHP中,我应该如何构造该页面。如果有人可以在这项任务上做一些自由职业者,那么请PM我…它在js中是否变成这样:“var makemods2=new Array;”文件。写(“”;“”)文件。写(“”;“”)文件。写(“”;“”)文件。写(“