2017-07-23 64 views
1

我想從PHP發回一個數組返回給Javascript。我使用Ajax來做到這一點。我知道如何發送數組到Javascript,但這次我想發送一個包含一些Javascript構造函數的數組。例如,我想能夠發送此:[new Date(2017,06,03), 25, 33]有沒有辦法將此數組發送到Javascript?如果是這樣,Javascript將如何以數組的第一個索引創建新日期的方式來使用此數組?從PHP發送Javascript構造函數到Javascript

+1

那麼,有'可以採取一個字符串,並執行它的代碼eval'功能:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/eval但有是很多反對使用的論點。如果你需要使用它(或者你認爲你需要),它通常會指出你的設計可以改進(當然不總是)。爲什麼不只是以你喜歡的格式發送日期,並在獲取數據後在JS中創建實際的對象? – Giedrius

+0

@Giedrius我需要轉換數組中的日期,因爲我在使用Google Charts。所以本質上,我發送一個已經定義好的值的數組,以便Google Charts可以接受。 – Bytes

+0

你需要將日期轉換爲?你能提供一個具體的例子嗎? – kmoser

回答

1

難道你不能簡單地發送new Date()而不是構造函數的值嗎?我認爲會更有效。

+0

我需要轉換數組中的日期,因爲我使用的是Google Charts。所以本質上,我發送一個已經定義好的值的數組,以便Google Charts可以接受。 – Bytes

1

簡答:不,沒有直接的辦法。

長答案:當你說你從PHP發送數組到Javascript時,你需要明白PHP是一種服務器端語言,而Javascript是在瀏覽器中運行的東西。 因此,在它們之間,你有網絡層,所有在該層上傳輸的東西都應該是可串行化的,通常意味着字符串。

因此,通過Ajax傳遞給瀏覽器的數據通常是JSON。 它只能包含原始值,例如:string,number,boolean,null。

新日期(2017,06,03)是一個JavaScript對象,它不是JSON規範的一部分。 您可以使用一些PHP函數(如date)對日期進行序列化,通過Ajax發送它,然後在JavaScript世界上反序列化它。

類似的東西:

<?php 
    /* your Ajax return */ 
    echo json_encode(array(date('c', mktime(0, 0, 0, 7, 1, 2000)), 25, 33)); // will return ["2000-07-01T00:00:00-07:00",25,33] 
?> 

然後在JavaScript部分u能與Date構造解析它。

// Javascript 
const response = ... 
const myData = new Data(response[0]); // Will be Date obj.