为什么这个javascript不起作用?

时间:2010-07-07 19:20:30

标签: php javascript

我有这个代码真是令人沮丧:

<script type ="text/javascript">
scriptAr = new Array(); // initializing the javascript array

<?php

foreach ($docsannlist as $subdocs) 
{
    $lines = $subdocs; // read file values as array in php
    $count = count($subdocs); //this gives the count of array
    //In the below lines we get the values of the php array one by one and update it in the script array.
    foreach ($lines as $line)
    {
        print "scriptAr.push(\"$line\");\n"; // This line updates the script array with new entry
    }
}

?>

document.write(scriptAr);
</script>

由于某种原因它只是不工作。请帮忙!

3 个答案:

答案 0 :(得分:2)

问题可能不在您的javascript代码中。

我的猜测是你有字符串转义问题。在打印之前,尝试在addslashes变量上使用$line php函数。

// as simple as that
$line = addslashes($line);

因为如果一行有引号你的PHP会正常工作,但你的javascript将如下所示:

scriptAr.push("some text here "a quotation" and some other text");

语法无效

如果您使用addslashes,该行将变为:

scriptAr.push("some text here \"a quotation\" and some other text");​​

哪个会运行得很好。

答案 1 :(得分:1)

你不能“写()”一个数组。数组只是对象的集合(在您的情况下是字符串)。

你需要循环遍历并依次打印每个元素:

for(var i in scriptAr) { 
    document.write(i + " => " + scriptAr[i] + "<br>\n"); 
}

所有这一切都是迭代每个元素并打印出来。这些方括号用于索引(在本例中为变量“i”),用于处理各个元素。

答案 2 :(得分:1)

print "scriptAr.push(\"$line\");\n";

如果$line中的任何字符混淆了JavaScript字符串文字,例如"\</script>或换行符,那么会导致问题。< / p>

document.write(scriptAr);

那是狡猾的,因为你不能直接写一个数组。它将获得toString ified,这将在行之间添加一些逗号。

将PHP变量(包括数组)转换为JavaScript文字json_encode已经有了很好的功能:

<script type ="text/javascript">
    var docs= <?php echo json_encode($docsannlist, JSON_HEX_TAG); ?>;

    // Flatten docs list-of-list-of-lines into list-of-lines
    //
    var lines= [];
    for (var i= 0; i<docs.length; i++)
        lines= lines.concat(docs[i]);

    document.write(lines.join(''));
</script>

虽然我不完全确定通过document.write()传递大量内容的优势是什么,而不仅仅是按原样输出。通常应避免document.write()