PHP var->Javascript->PHP

PHP var->Javascript->PHP

本文关键字:gt PHP Javascript- var-      更新时间:2023-09-26

我正在处理一个存在以下问题的项目:

数据库(通过php)提供了一个数组,其中包含需要加载的JavaScript文件列表。它被存储在变量CCD_ 1中。我需要用php(foreach loop)提取这些源文件,并通过JavaScript加载它们。它是这样的:

document.write("<?php foreach($js_files as $filename) {if( trim($filename) <> "" ){echo '<script     type=''text/javascript'' src=$filename></script> 'n';}} ?> "); 

问题是它加载了几个文件,但第一个文件(一个googleapi文件)出错了。有人能解决这个问题吗?或者我必须朝哪个方向看的任何想法。

这在多个级别上都是个坏主意,但可以很容易地解决。但首先:1) 切勿使用document.write()。要动态加载脚本,最好使用:

var script = document.createElement('script'); //create a script element
script.src = 'javascript.js'; //path to src file
//now get the body element and append the new script element
document.getElementsByTagName('body')[0].appendChild(script); 

2) 如果需要按特定顺序加载这样的脚本,则加载脚本可能不起作用,因为动态脚本的下载是异步(非确定性)发生的

3) 一般来说,您应该将js文件连接起来以减少http请求,您可以使用grunt之类的工具来进行自动构建过程。

4) 如果你真的,真的想动态加载这些脚本,你可以使用我在(1)中概述的过程来获得文件名,使用ajax:

//depends on jQuery, but could be written vanilla if needed
$.get('myPhp.php', function(resp){
    var arr = resp.split(','); //splits returned string on the comma
    var i = arr.length;
    //iterate through the results set
    while (i--) {
        //do process from (1) above
    }
});

请注意,这仍然存在无序问题。如果您需要顺序动态加载,请查看require.js

如果代码需要从JavaScript函数中激发,那么您可以去掉document.write,转而创建新的脚本对象并附加到head标记。

<?php
  foreach($js_files as $filename){
    if(trim($filename) != ''){
      echo 'var s = document.createElement("script");';
      echo 's.type = "text/javascript";';
      echo 's.src = "' . $filename . '";';
      echo 'document.getElementsByTagName("head")[0].appendChild(s);'
    }
  }
?>

您必须转义if( trim($filename) <> "" )中的代码",因为"破坏了javascript字符串。