繁体   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