我有这个代码真是令人沮丧:
<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>
由于某种原因它只是不工作。请帮忙!
答案 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()
。