2011-05-10 114 views
1

你好 我想从PHP传递几个数组到javascript。对于其中的一些而言,它适用,对其他则不适用。我得到一组文件名和一个包含几个文本文件内容的数组。从PHP传递数组到javascript

<?php 
    $album="./images/text_".$benutzerLang."_album1/"; 
    $fileArray=lsRandom("./images/album1"); 
    $listTextArray=initTexts($album,$fileArray); 
    $falseArray=lsRandom("./images/album2"); 

    print $listTextArray[0]; 
    ?> 

    <script language="javascript" type="text/javascript"> 

var filesArray=new Array(5); 
var falseArray=new Array(5); 
var textListArray=new Array(5); 

<?php 

$i=0; 
foreach($fileArray as $element){ 
    print 'filesArray['.$i.']="'.$element.'";'; 

    $i++; 
} 
$i=0; 
foreach($falseArray as $element){ 
    print 'falseArray['.$i.']="'.$element.'";'; 
    $i++; 
} 
$i=0; 
foreach($listTextArray as $element){ 
    print 'textListArray['.$i.']="'.$element.'";'; 
    $i++; 
} 

?> 

function createText(){//... 
     </script> 
    <?php 



    function lsRandom($foldername){ 
    $files = array(); 
    $returnFiles=array(); 
    $indexes=array(); 
    $currentPath=getcwd(); 

    chdir($foldername); 
     // Get the all files and folders in the given directory. 
    $files = glob("*", GLOB_BRACE + GLOB_MARK); 
    $indexes=(array_rand($files,5)); 
    shuffle($indexes); 
    foreach($indexes as $in){ 
    $returnFiles[$in]=$files[$in]; 
    } 

    chdir($currentPath); 
    return $returnFiles; 
    } 

    function getFileText($fileName,$path){ 
    $filePath=''.$path.''.$fileName.''; 
    //$file=fopen($filePath,'r'); 
    //$text=fread($file,filesize($filePath)); 
    $text=file_get_contents($filePath,false); 
    return $text; 
    } 

    function initTexts($album, $images){ 
    $textArray1=array(); 
    $i=0; 
    foreach($images as $im){ 
    $nameArray=explode(".",$im); 
    $textName=''.$nameArray[0].'.txt'; 
    $textArray1[$i]=getFileText($textName, $album); 
    $i++; 
    } 
    return $textArray1; 
    } 


    ?> 

问题是$ listTextArray。在第8行中,我可以打印整个数组$ listTextArray,其中包含一些小文本文件的内容,它可以工作。但在'foreach - loop'中进一步下降。它不再工作了。只要我在第二个php块中使用变量$ listTextArray,我的其他代码就不会再执行了。我不知道为什么它不能访问该部分的$ listTextArray。因为它对其他数组$ fileArray和$ falseArray没有问题。

回答

1

您发起

var textListArray=new Array(5); 

但尝试使用

listTextArray 

使用相同的名称,一切都会好起来的

+0

没有不匹配 - 在PHP中使用JS和'$ listTextArray'中的'textListArray'。不过,使它们在不同语言中相同可能有助于减少混淆。 :-) – 2011-05-10 23:12:18

+0

感谢您的回答 – kapukinz 2011-05-11 12:46:41

3

一些普遍性的建议:

  1. 这很难排查这种问题没有错误信息。如果没有错误正在打印,您可以看到它,请查找名为php.log,error.loghttpd.log的文件,或者询问您的服务器管理员。
  2. 尝试在阵列上使用print_r()来查看它们的结构是否有任何不同。例如,刚刚在PHP设置阵列后:

    print_r($fileArray); 
    print_r($listTextArray); 
    print_r($falseArray); 
    
  3. ,而不是通过循环构建JS数组,请尝试使用内置json_encode()函数。这既简化了你的PHP代码,当有问题可能导致更多有用的错误信息:

    var filesArray=<?php json_encode($fileArray) ?>; 
    var falseArray=<?php json_encode($falseArray) ?>; 
    var textListArray=<?php json_encode($listTextArray) ?>; 
    
+0

非常感谢!问题可能是编码,所以通过使用json_encode,它解决了问题! – kapukinz 2011-05-11 12:46:22

1

的问题已经解决了你。改为使用json_encode

print('filesArray = '.json_encode($filesArray)); 

注意json_encode要求您的数据是UTF8编码。但是,无论如何你都应该这样做。

+0

谢谢你正是这个问题! – kapukinz 2011-05-11 12:47:39