我正在尝试制作一个非常简陋的页面,加载两个特定的PDF文档,在页面加载时会简单地显示一个,然后在60秒的时间间隔后,会循环并显示另一个。
目前,我的问题是简单地将pdf转换为JS中的变量,以便我可以为它们分配时间周期。
我怎么能把pdf从控制器发送,并把它们放入JS变量,以正确地完成这一点?
public function getPDFDocs()
{
if(Storage::disk('test_docs')->exists('testFirstFile.pdf')){
$file1 = Storage::disk('test_docs')->get('testFirstFile.pdf');
}
if(Storage::disk('test_docs')->exists('testSecondFile.pdf')){
$file2 = Storage::disk('test_docs')->get('testSecondFile.pdf');
}
return view('test.index')
->with('firstFile', $file1)
->with('secondFile', $file2);
}
index.blade.php
@section('loadjs')
getPDFPages() {
let visible = [];
//visible.push ({pages here??})
}
@endsection
首先,似乎您正在获取文件PDF的内容,而不是它们的路径。因此,在初始HTTP响应中传输整个PDF数据可能效率不高。
这个PDF文件可以公开访问吗?如果是这样的话;返回它们的HTTP url,而不是pdf的data。
之后;将数据从Laravel后端注入到JavaScript的刀片文件中;最好的方法是将数据转换为json,将其发送到blade并将其作为HTML元素的data- attribute写入,然后在JavaScript中从data- attribute读取数据并将json解码为JS对象。
下面是一个例子;
public function getPDFDocs()
{
if(Storage::disk('test_docs')->exists('testFirstFile.pdf')){
// assuming this files publicly accessible and use url method
$files[1] = Storage::disk('test_docs')->url('testFirstFile.pdf');
}
if(Storage::disk('test_docs')->exists('testSecondFile.pdf')){
// assuming this files publicly accessible and use url method
$files[2] = Storage::disk('test_docs')->url('testSecondFile.pdf');
}
return view('test.index', ['files' => $files]);
}
在你的刀刃上;
<!-- write down your html here -->
<span id="filesdata" data-files="{{ json_encode($files) }}" ></span>
@section('loadjs')
var filesJson = document.getElementById('filesdata').getAttribute('data-files');
var files = JSON.parse(filesJson);
// now you have your files, lets check them
console.log(files);
getPDFPages() {
let visible = [];
//visible.push ({pages here??})
}
@endsection
并使用PDF url在客户端显示它们。让客户端请求并获取原始pdf数据,不要试图在初始响应中返回它们。