该方案需要像这样运行:客户端上传CSV文件,然后使用上传的CSV文件中的数据动态填充表格。
我可以用简单的表格上传CSV文件。没问题。 我可以在服务器端使用PHP解析数据。没问题。 我可以用PHP服务器端创建一个数组。没问题。
我该怎么回到JavaScript进行处理呢?我以为我可以AJAX它,但我会在哪里指出请求?
我想过用PHP来递归调用页面,但是它失去了异步性,这是不行的。
似乎我在这里缺少一些简单的东西。
TIA求助。
WR!
答案 0 :(得分:3)
答案很简单。异步上传文档,让上传调用返回一些JSON。
或者(对于较大的文档更好),上传文档并让服务器返回一个ID,然后使用带有该ID的AJAX调用脚本。这样,您可以对大文件进行后台处理,并在准备好后返回数据,或者返回某种等待状态,客户端等待5秒左右再次尝试。
答案 1 :(得分:0)
如果您想沿着Ajax路线走下去,您应该创建一个专门用于获取CSV数据并将其作为json对象返回的页面(或路径)。让我们说你只需要知道生成数据的id,就可以创建查找$ _POST ['id']的csvdata.php,获取该id的数据,然后返回json_encode(csvArray)
数据。您可能希望设置mime类型header('Content-type: application/json');
这与提供文件的脚本没有什么不同。您需要知道的是请求的内容以及请求发送的数据。如果您需要页面上的CSV数据,则需要呈现一个脚本,该脚本知道要与请求一起发送的数据。您的模板引擎应该能够为您呈现小动态脚本。原则上,您希望生成类似
...
<body>
...
<script type="text/javascript">
(function () {
var csvid = 1;
// Make ajax post to csvid.php with csvid as id
}());
</script>
</body>
您将生成这样的脚本,其中csvid值是动态设置的(使用您选择的方法生成html / js)。始终使用POST来检索Ajax数据,尤其是在数据敏感且需要会话身份验证的情况下。在这种情况下,GET将对json数组漏洞开放。
或者,您可以简单地在不使用Ajax的情况下内联呈现数组。因此,您可以只使用在其中编码的数组来呈现脚本,而不是创建ajax请求变量。
模板:
<script type="text/javascript">
(function () {
var data = {jsondata};
someNameSpace.someProcessingFunction(data);
}());
</script>
用json_encode(csvarray)替换{jsondata};