如何将PHP数组转为JS数组并获取所有目录图片名存入LocalStorage?
解决目录图片文件名获取及LocalStorage存储问题
看起来你遇到了两个小问题:一是PHP端只返回最后一个图片文件名,二是想把获取到的所有文件名存入LocalStorage。我来一步步帮你解决:
1. 修复PHP代码,返回所有文件名
你的PHP代码里,每次循环都直接把$fileName变量覆盖成当前文件的basename,这就导致最后只留下了最后一个文件的名字。我们需要把每个文件名添加到数组里,而不是覆盖变量:
<?php // 注意:请确保$seldir和$match变量已正确获取(比如从POST请求参数中) $tardir = "mysite.com/projects/" . $seldir . "/" . $match . "/*.jpg"; $files = glob($tardir); $fileNames = array(); // 用复数变量名更清晰 // 用foreach循环遍历所有文件,把文件名添加到数组 foreach ($files as $file) { $fileNames[] = basename($file, ".jpg"); } echo json_encode($fileNames); ?>
这样修改后,PHP会返回包含所有.jpg文件名的数组JSON,前端就能拿到全部文件名了。
2. 修改JavaScript代码,存入LocalStorage
LocalStorage只能存储字符串类型的数据,所以我们需要把获取到的数组用JSON.stringify()转成字符串再存储,读取时再用JSON.parse()解析回来。另外补充一个小细节:你的AJAX请求没有传递matchLst参数给PHP,这会导致PHP里的$match变量无值,目录路径构建错误,我也一起补上了:
$(document).on("click", "ul#matchListUL li a", function(event){ event.preventDefault(); var matchLst = $(this).attr('href'); if (matchLst !== null && matchLst !== "") { $.ajax({ url : "filenames.php", dataType : "JSON", type : "POST", // 把点击获取的matchLst传给PHP,确保目录路径正确 data: { match: matchLst }, success:function(data) { console.log("所有文件名:", data); // 存入LocalStorage,自定义键名方便后续读取 localStorage.setItem("imageFileNames", JSON.stringify(data)); // 后续读取示例: // const savedNames = JSON.parse(localStorage.getItem("imageFileNames")); // console.log("读取到的文件名:", savedNames); }, error: function(xhr, status, error) { console.error("请求出错:", error); } }); } return false; })
这样修改后,你点击链接时就能获取到目标目录下所有.jpg文件名,并且成功存入LocalStorage啦。
内容的提问来源于stack exchange,提问作者popeye
相关产品推荐
相关产品推荐

