将javascript数组整理到javascript数组

问题描述:

是的,它被问了很多。不,我仍然无法在网上搜索几天后继续工作。 (另外:是的,我还是很新的PHP和复制/粘贴编码器)。我在PHP中有一个名为EP的数组。我洗牌EP。然后我需要将EP的混洗值传递给一个javascript数组。将javascript数组整理到javascript数组

我检查了这里Convert php array to Javascript所有的答案,但没有更迭: Spudley的答案用在一个文件中PHP和JavaScript,而我使用的是单独的文件(的index.php,data.php,main.js)。如果我使用Eric的答复的NetBeans告诉我,“预期操作性却发现..”

阵列位于data.php:

$EP = array(30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220); 
shuffle($EP); 

我需要这个洗牌阵列(在洗牌后的顺序)在我的主.js,所以我可以用jqplot在一个图表中显示它。 我用这个,但随后的整个js文件基本上停止工作

var arrayFromPHP = "<?php echo json_encode($EP); ?>"; 
alert($.toJSON(arrayFromPHP)); 

和我尝试以下,但警告说“未定义”

$.getJSON("data.php",function($EP){ 
     alert($.toJSON($EP));   
    }); 

有人能指出我的错误?

+0

[将php数组转换为Javascript]的可能重复(http://stackoverflow.com/questions/5618925/convert-php-array-to-javascript) – Naruto 2015-03-19 10:59:37

+0

您无法在js文件中运行php代码 – charlietfl 2015-03-19 11:02:09

+0

您无法在js文件中获取php变量;将值赋给全局的javascript变量在php文件中并得到js文件 – 2015-03-19 11:03:26

,将转换您的阵列

<?php 
$EP = array(30,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,210,220); 
echo '<script> 
var ep = [ '. implode(' , ', $EP) .' ]; 
</script> 
'; 
?> 

如果你想使用它的.js文件中(很小心与缓存),你必须编辑.htaccess文件

<FilesMatch "\.js$"> 
    SetHandler application/x-httpd-php 
    Header set Content-type "application/javascript" 
</FilesMatch> 

为了防止缓存JS文件,编辑.htaccess文件

<FilesMatch "\.js$> 
FileETag None 
Header unset ETag 
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</FilesMatch> 
+0

感谢您的回复。如果你说“对缓存非常小心”,由于我的知识水平有限,我有点犹豫...... – ShariDB 2015-03-19 11:57:38

+0

每次调用js文件时,您都可以添加一个参数,每次调用它时都会创建一个新链接,像http://..../file.js?timestamp = – 2015-03-19 12:40:18

+0

或在.htaccess中禁用cahce(编辑) – 2015-03-19 12:43:04

还好你现在正在做的是以下几点:

将JSON对象回复为javascript变量。唯一的问题是你用引号包围它。所以不是它的一个字符串。

如果你看看源代码,你会看到

<script type="text/javascript"> 
var arrayFromPHP = "[110,80,190,60,160,120,150,40,220,170,30,130,200,180,90,70,50,210,100,140]"; 
alert($.toJSON(arrayFromPHP)); 
</script> 

你需要做的是

var arrayFromPHP = <?php echo json_encode($EP); ?>; 

不带引号你会得到一个完全合格的阵列与实例您能行得通。

现在,如果您希望将其作为JSON格式,请保持原样,不需要使用jquery将其转换为JSON,因为它已经是JSON字符串。你可以直接传递它。

一切都取决于你的需要。 JSON字符串或完全限定数组。

如果选择保留引号以获取完全限定数组,则还可以通过对字符串执行JSON.parse(arrayFromPHP)将字符串转换为数组。

所以罗马有多条公路,它由您决定选择您需要的选项。

+0

谢谢Michael。如果我写var arrayFromPHP = ; Netbeans说这是不正确的代码(预计操作数,但发现 ShariDB 2015-03-19 12:01:14

+0

这是因为netbeans预计JavaScript代码和probaly无法处理嵌套的代码。如果它在一个.php文件中,php解析器将完成它的工作。运行它,让整洁的人闭嘴。 – Tschallacka 2015-03-19 12:02:43