2015-03-19 69 views
2

是的,它被問了很多。不,我仍然無法在網上搜索幾天後繼續工作。 (另外:是的,我還是很新的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

回答

2

,將轉換您的陣列

<?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 = <?php echo date(「U」); ?> – 2015-03-19 12:40:18

+0

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

0

還好你現在正在做的是以下幾點:

將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 = <?php echo json_encode($ EP); ?>; Netbeans說這是不正確的代碼(預計操作數,但發現<) – ShariDB 2015-03-19 12:01:14

+0

這是因爲netbeans預計JavaScript代碼和probaly無法處理嵌套的代碼。如果它在一個.php文件中,php解析器將完成它的工作。運行它,讓整潔的人閉嘴。 – Tschallacka 2015-03-19 12:02:43