Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP变量->;Javascript->;PHP_Javascript_Php - Fatal编程技术网

PHP变量->;Javascript->;PHP

PHP变量->;Javascript->;PHP,javascript,php,Javascript,Php,我正在从事一个有以下问题的项目: 数据库(通过php)提供一个数组,其中包含需要加载的JavaScript文件列表。它存储在变量$array(php)中。我需要使用php(foreach循环)提取这些源文件,并通过JavaScript加载它们。是这样的: document.write("<?php foreach($js_files as $filename) {if( trim($filename) <> "" ){echo '<script type=\'te

我正在从事一个有以下问题的项目:

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

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

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

你必须在
if(trim($filename)”
中转义代码“”,因为
中断javascript字符串。

如果需要从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);'
    }
  }
?>

这在多个层面上都是一个坏主意,但可以很容易地解决。但首先: 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
请求,您可以使用类似的工具来进行自动构建过程

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
    }
});

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

的内容,我认为解决方法是完全改变您的方法。
echo'\n'
将不起作用。您需要使用双引号来内联使用变量($filename)。如果使用单引号,
$filename
将只是一个字符串,而不是变量。无法更改我的方法。我正在处理的De数据库提供了一个必须加载的资源列表。输出格式为数组。我需要在回调函数触发时加载文件这必须在javascript回调函数中触发,所以我不认为这是一个解决方案这里的转义如何工作?我一直给我错误删除“document.write”(“”)包装,就像+MrCode所说的那样,并删除带有“Javascript在客户端处理,而php在服务器端处理,所以它不能像你预期的那样工作。我认为我没有弄清楚问题。PHP在启动时从数据库加载文件列表。当执行某个javascript回调时,必须公开(加载)此列表!