javascript - 将文件从 Apache 提供给 Javascript

标签 javascript node.js ajax apache web-services

我正在使用 Javascript 和 WebGL 编写我的第一个 Web 应用程序。现在我正在 Apache 的 localhost 上运行该应用程序。该应用程序需要使用立即提供的数据。到目前为止,我使用的是运行时发生的 AJAX 调用,这不再适合我的目的。因此,我希望应用程序在初始化时将所有文件从服务器加载到客户端,而不是在被要求时从服务器向客户端提供单个文件(我希望这在开始时自动发生,这样我就不必添加每个新的文件)文件作为 html 索引中的 url)。我知道我应该使用服务器端脚本来做到这一点;可能使用 PHP,因为我有 Apache 本地主机?我有不同的文件夹,以统一的数据格式(.txt、.png 和 .json)保存必要的资源。所以我想做的是,在 Javascript 应用程序启动之前,浏览文件夹并为每个文件夹发送一个对象,该对象将文件名作为绑定(bind)到文件数据的键。我的直觉是否正确,我需要用 PHP 来做到这一点?如果是,我从哪里开始告诉我的应用程序何时做什么(首先开始使用 php 提供文件,然后启动 javascript 应用程序)?我如何在本地主机上执行此操作?我是否应该考虑扩展我的工具集(例如在服务器端使用nodeJS(目前在本地))?如果是这样,您建议使用什么轻量级工具来完成此类工作?我觉得我在这里缺少一些设计原则。

编辑: 请记住,我不想专门调用单个文件......我已经这样做了。我需要的是一个脚本,在实际应用程序的程序逻辑启动之前,在应用程序的初始化时间自动将服务器上某个文件夹的所有文件提供给客户端。

最佳答案

你的问题有点宽泛,所以我会尽力。为什么 AJAX 不适用于实时数据,但加载一次所有文件却可以?如果您正在处理实时数据,为什么不研究一下 Websocket 或至少 AJAX 查询呢?

如果要将数据从服务器传递到客户端,无论如何都需要使用 HTTP 请求。客户端需要使用 GET 请求或 POST 请求来向服务器请求数据并接收其作为响应。

理论上,您可以将数据从 PHP 直接传递到应用程序的 View (从技术上讲,每当用户从服务器请求 .php 文件等数据时,这都是通过 GET 请求完成的),但这并不像如果 Javascript 可以访问数据。您可以进行一些修改,并使用一些 .value 方法将数据从 View “传输”到 Javascript,但这并不理想,并且可能容易出现一些安全漏洞。这也意味着数据仅被传递一次。

因此,需要在初始化时处理数据,然后立即使用 Javascript 和 HTTP 请求将数据传输到客户端。

因此,如果您希望 Javascript 能够访问数据并在变量中使用它或进一步操作它,那么您需要使用 HTTP 请求,例如由 Javascript 调用的 GET 或 POST。否则,您需要在初始化时立即将数据传递到 View (通过 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 可以简单地传回,它是一个包含所有不同数据集的单个数组(如果每个数据集需要不同)。

关于javascript - 将文件从 Apache 提供给 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360829/

相关文章:

javascript - 这些在 jQuery 选择器中转义方括号的不同方法有什么区别

Javascript:For 循环不起作用

javascript - 如何转换 mongo ObjectId .toString 而不包含 'ObjectId()' 包装器——仅包含值?

php - 使用php从数据库中删除评论

php - 如何将 JavaScript 变量传递给 JQuery

javascript - 选择时更改背景颜色

javascript - 如何绑定(bind)3个输入值?

node.js - Docker 日志不显示颜色(express + nodejs 图像)

javascript - 如何将对象从 EJS 传递到 Node.js 路由器 - Javascript、EJS、Node.js、MySQL

php - 无法使用ajax将多维数组传递给php