Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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
Javascript 在PHP循环中调用js函数,同时将PHP变量作为参数传递给其中一个函数_Javascript_Php - Fatal编程技术网

Javascript 在PHP循环中调用js函数,同时将PHP变量作为参数传递给其中一个函数

Javascript 在PHP循环中调用js函数,同时将PHP变量作为参数传递给其中一个函数,javascript,php,Javascript,Php,好的,我们已经创建了两个javascipt函数,我想在php循环中调用它们,同时将php变量作为参数传递给第二个函数 addElements($filePath) createPost(); addElements('filepathA'); addElements('filepathB'); addElements('filepathC'); createPost(); addElements('filepathD'); addElements('filepathE'); // ... 这

好的,我们已经创建了两个javascipt函数,我想在php循环中调用它们,同时将php变量作为参数传递给第二个函数

addElements($filePath)
createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
这个filePath变量必须是来自内部循环的最后一个变量,我想这样写不会从第一个循环得到第一个变量

createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
以下是我想要的,以及到目前为止我所写的:

                <script>                
                <?php foreach( glob( 'posts/*' ) as $filePath ){
                        //createPost(); call js function declared in header
                        foreach( glob( $filePath.'/*' ) as $filePath ){
                        //addElements($filePath) call second hs function declared in header here i pass the last $filePath from the second loop as parameter
                        }

                }?>
              </script>
createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...

再次尝试,但仍然不起作用

<script>                
                        <?php foreach( glob( 'posts/*' ) as $filePath ){
                                //createPost(); call js function declared in header
                                echo 'createPost()';
                                foreach( glob( $filePath.'/*' ) as $filePath ){
                                //addElements($filePath) call second hs function declared in header here i pass the last $filePath from the second loop as parameter
                                echo 'addElements('.$filePath.')';
                                }

                        }?>
createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...

PHP仅在服务器端执行,因此不能有执行javascript函数的PHP循环(javascript=客户端)。但是,您可以在服务器上生成javascript代码,并在客户端执行

createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
因此,简单的解决方案是写下这样的内容:

<script>                
  <?php 
  foreach( glob( 'posts/*' ) as $filePath ){
    echo 'createPost();'; // call js function declared in header
    foreach( glob( $filePath.'/*' ) as $filePath ){
      echo 'addElements("'.$filePath.'");'; // call second hs function declared in header here i pass the last $filePath from the second loop as parameter
    }
  }
  ?>
</script>
createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
正如你所看到的,这里没有循环。另一个解决方案是在服务器端创建一个数据数组,并使用
json\u encode
php函数来获得可以在客户端使用的javascript数据:

createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
    <?php 
$results = [];
foreach( glob( 'posts/*' ) as $filePath ){
    $subDirs = [];
    foreach( glob( $filePath.'/*' ) as $filePath ){
        $subDirs[] = $filePath; 
    }
    $results[] = [
        'dir' => $filePath,
        'subDirs' => $subDirs
    ];
}
echo 'var data = ' . json_encode($results) . ';';
?>

现在您有了一个javascript数组,可以像往常一样使用:

createPost();
addElements('filepathA');
addElements('filepathB');
addElements('filepathC');
createPost();
addElements('filepathD');
addElements('filepathE');
// ...
for (var i = 0; i < data.length; i++){
    createPost();
    for (var j = 0; j < data[i].subDirs.length; j++){
         addElements(data[i].subDirs[j]);
    }
}
for(变量i=0;i
不可能。php在服务器上运行,js在客户端上运行。不能让PHP调用js函数调用(并让它们执行)同时调用PHP。php可以输出包含JS函数调用的文本,当客户端接收到页面时,它们将运行,但仅此而已。但我在网上看到了echo的可能解决方案请参阅我的editStrange问题。PHP可以输出页面加载时执行的纯javascript代码。您只需使用脚本标记并将javascript作为视图的一部分输出即可。您可能需要重新思考您的代码。尝试阅读.ajax()(jQuery)并通过JSON编码(PHP JSON_encode())传递数据我知道有更好的方法使用ajax和json,但我对php不太熟悉这就是为什么我这样做的原因,但我确信这是可以实现的。我所做的是将文件的url传递到js函数中。请务必意识到,当php执行脚本时,Javascript不会运行。只有当PHP完成脚本时,浏览器才会加载整个页面,并且只有在那时才会执行Javascript。