簡體   English   中英

將文件從Apache服務到Javascript

[英]Serve files from Apache to Javascript

我正在用Javascript和WebGL編寫我的第一個Web應用程序。 現在,我正在從Apache在localhost上運行該應用程序。 該應用程序需要使用即時提供的數據。 到現在為止,我一直使用在運行時發生的AJAX調用,但對於我的目的而言,該調用已不再可行。 因此,我希望應用程序在初始化時從服務器將所有文件從服務器加載到客戶端,而不是在詢問時從服務器向客戶端提供單個文件(我希望此操作在開始時自動發生,因此不必添加每個新文件。文件作為html索引中的url)。 我知道我應該使用服務器端腳本執行此操作; 可能有PHP,因為我有Apache localhost? 我有不同的文件夾,這些文件夾以統一的數據格式(.txt,.png和.json)保存必要的資源。 因此,我想做的是,在Javascript應用程序啟動之前,瀏覽該文件夾並為每個文件夾發送一個對象,該對象將文件名作為綁定到文件數據的鍵。 我的直覺是我需要使用PHP做到這一點嗎? 如果是,我從哪里開始告訴我的應用程序什么時間(首先使用php開始提供文件,然后啟動javascript應用程序)? 如何在本地主機上執行此操作? 我是否應該考慮擴展我的工具集(例如,在ServerSide上使用nodeJS(目前為本地))? 如果是這樣,您為此類工作建議使用哪些輕型工具? 我覺得這里缺少一些設計原則。

編輯:請記住,我不想專門調用單個文件...我已經在這樣做了。 我需要的是一個腳本,該腳本會在實際應用程序的程序邏輯啟動之前,在應用程序初始化時自動將服務器上某個文件夾中的所有文件提供給客戶端。

您的問題有點籠統,所以我會盡力而為。 為什么AJAX無法用於實時數據,但是一次加載所有文件卻可以呢? 如果您正在使用實時數據,為什么不研究websocket或至少瀏覽AJAX查詢呢?

如果要將數據從服務器傳遞到客戶端,則無論如何都需要使用HTTP請求。 客戶端需要從服務器請求數據並作為響應接收GET請求或POST請求。

從理論上講,您可以將來自PHP的數據直接傳遞到應用程序的視圖(從技術上講,這是通過GET請求在用戶從服務器請求數據(例如.php文件)時完成的),但這並不像Javascript那樣靈活。訪問數據。 您可以使用一些.value方法進行一些黑客攻擊並將數據從視圖“傳輸”到Javascript,但這並不理想,並且容易出現一些安全漏洞。 這也意味着數據僅傳遞一次。

因此,將需要發生的是,數據需要在初始化時進行處理,然后通過使用Javascript和HTTP請求立即傳輸到客戶端。

因此,如果您希望Javascript能夠訪問數據並在變量中使用它或對其進行進一步操作,則需要使用HTTP請求,例如GET或POST,這是Javascript調用的。 否則,您需要在初始化時(通過PHP)立即將數據傳遞給視圖,但這意味着您無法使用實時數據,因為只有在刷新頁面時數據才傳遞一次。

scandir()示例:

<?php
//scandir() returns filenames, not data from files
$fileArray = scandir('datafolder/') //this is a relative path reference to the folder 'datafolder'
$finalArray = [];

foreach($fileArray as $filename){
    tempArray = [];
    $file = fopen('datafolder/' . $filename, 'r'); //im pretty sure scandir only retrieves the filenames and not the path, so you might need to append the filepath so your script knows where to look
    $tempArray = fgetcsv($file, 1024); //temp array to hold contents of each iteration of foreach loop
    array_push($finalArray, $tempArray); //this will store the data for later use
}

或者可以使用數據,具體取決於它是什么。 說,如果您需要合並來自多個.csv文件的數據,則可以讀取每個文件並將其附加到單個數組中。 如果要讀取多個不同的文件並保留每個文件的獨立性,則可以創建多個數組,然后將包含每個文件數據的單個JSON編碼對象作為對象的單獨屬性傳遞回去,例如:

{
    'dataOne': [0,1,2,3,4,5,6...],
    'dataTwo': ['new', 'burger', 'milkshake'],
    'dataThree': ['Mary', 'Joe', 'Pam', 'Eric']
}

可以使用以下方法之一使用PHP關聯數組創建該數組:

//assuming $arrayOne is already assigned from reading a file and storing its contents within $arrayOne
$data['dataOne'] = $arrayOne;
// or
array_push($data['dataTwo'], $arrayTwo);
// or
array_push($data, [
   'dataThree'  => ['Mary', 'Joe', 'Pam', 'Eric']
]);

然后$data可以簡單地傳遞回,它是包含所有不同數據集的單個數組,如果每個數據集需要不同的話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM