我正在用Javascript和WebGL编写我的第一个web应用程序。目前,我正在Apache的localhost上运行该应用程序。该应用程序需要使用即时提供的数据。到目前为止,我一直在处理运行时发生的AJAX调用,这对我来说已经不起作用了。因此,我希望应用程序在初始化时将所有文件从服务器端加载到客户端,而不是在被要求时将单个文件从服务器侧提供到客户端(我希望这在启动时自动发生,这样我就不必将每个新文件都添加为html索引中的url)。我知道我应该用服务器端脚本来完成这项工作;可能是用PHP,因为我有一个Apache本地主机?我有不同的文件夹,它们以统一的数据格式(.txt、.png和.json)保存我所需的资源。因此,我想做的是,在Javascript应用程序启动之前,查看文件夹,并为每个文件夹发送一个对象,该对象将文件名作为绑定到文件数据的键。我的直觉是正确的,我需要用PHP来做这件事吗?如果是,我从哪里开始告诉我的应用程序什么时候该做(首先开始用php提供文件,然后启动javascript应用程序)?如何在本地主机上执行此操作?我是否应该考虑扩展我的工具集(例如,在ServerSide上使用nodeJS(目前在本地))?如果是这样的话,你建议使用什么轻量级工具来完成这类工作?我觉得我遗漏了一些设计原则。
编辑:请记住,我不想专门调用单个文件。。。我已经在做了。我需要的是一个脚本,它在实际应用程序的程序逻辑启动之前,在应用程序的初始化时间自动将服务器上某个文件夹的所有文件提供给客户端。
你的问题有点宽泛,所以我会尽力的。为什么AJAX不适用于实时数据,但加载所有文件一次就可以了?如果您使用的是实时数据,为什么不查看一个websocket或者最起码的AJAX查询呢?
如果您想将数据从服务器传递到客户端,无论怎样,都需要使用HTTP请求。GET请求或POST请求是客户端从服务器请求数据并将其作为响应接收所必需的。
理论上,您可以直接将数据从PHP传递到应用程序视图(从技术上讲,每当用户从服务器请求数据(如.PHP文件)时,都可以通过GET请求来完成),但这不像Javascript可以访问数据那样灵活。您可以进行一些破解,并使用一些.value方法将数据从视图"传输"到Javascript,但这并不理想,而且可能会出现一些安全漏洞。这也意味着数据只传递一次。
因此,需要进行的是,数据需要在初始化时进行处理,然后通过使用Javascript和HTTP请求立即传输到客户端。
因此,如果您希望Javascript能够访问数据并在变量中使用它或进一步操作它,那么您需要使用Javascript调用的HTTP请求,如GET或POST。否则,您需要在初始化时(通过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
可以简单地传递回来,它是一个包含所有不同数据集的单个数组。