Javascript 迭代ajax响应数据是单独打印字母,而不是整个单词
我试图从PHP文件中获取字符串数组,以便在javascript文件中使用它。我可以在javascript中访问它(Javascript 迭代ajax响应数据是单独打印字母,而不是整个单词,javascript,php,ajax,loops,Javascript,Php,Ajax,Loops,我试图从PHP文件中获取字符串数组,以便在javascript文件中使用它。我可以在javascript中访问它($namelist),但每当我尝试打印它时,数组中的字符串就会被打印为单独的字母,就像每个单词的每个字母都有自己的索引一样 我不要这个。我想把整个单词打印在一行上。在这个模型中,应该只打印出两个单词。(hakim和henry) var字母=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”、“M”、“N”、“O”、“P”、“Q”、“R”、
$namelist
),但每当我尝试打印它时,数组中的字符串就会被打印为单独的字母,就像每个单词的每个字母都有自己的索引一样
我不要这个。我想把整个单词打印在一行上。在这个模型中,应该只打印出两个单词。(hakim
和henry
)
var字母=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”、“M”、“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”];
const dir=“./submissions/”;
//常数fs=要求('fs');
变量扩展=[“.jpg”、“.png”];
对于(变量i=0;i
PHP/LoadName:
<?php
$namelist = array();
$name = $_POST['postname'];
$path = '../submissions';
$files=scandir($path);
foreach($files as &$value){
if(strtolower(substr($value,0,1)) == strtolower($name)){
array_push($namelist, strtolower(strtok($value,'_')));
}
// echo strtolower(substr($value,0,1));
}
$namelist = array_unique($namelist);
// echo count($namelist);
// $namelist = sort($namelist);
$keys = implode($namelist );
// echo implode(',',$namelist);
echo $keys;
?>
您正在向ajax调用返回字符串类型值。因此,您的
for
循环正在迭代单个字符串的偏移量/字符。我建议将平面数组数据作为json编码的字符串传递给ajax调用,以便它可以迭代每个元素,并将名字显示为单独的链接
此外,我还有一些建议要分享
get
而不是post
。这意味着使用$.get
或$.ajax
glob()
来搜索我的文件系统。它非常通用,并且有一个非常有用的功能,可以使用它的大括号语法来动态过滤搜索。无论如何,scandir()
对于这个任务来说并不一定不好,因为您正在从文件名中修剪前导的子字符串。(为了记录,我可能会结合使用glob()
,然后迭代调用strstr()
)preg_filter()
是一个我很少使用的函数,但似乎适合于此任务。它不仅尝试对遇到的每个值进行变异,还丢弃无法变异的值(因为模式不满足)["hakim","henry"]
要在jquery中使用此json字符串,请遵循中的建议
$files = [
'Hakim_123.txt',
'Mick_MacKusa.jpg',
'henry_rollins.gif',
'Z_zzz_zzz_zzz.csv'
];
$_GET['postname'] = 'H';
if (!preg_match('~^[A-Z]$~', $_GET['postname'] ?? '')) {
exit('[]');
}
exit(
json_encode(
array_values(
array_unique(
preg_filter(
'~^' . lcfirst($_GET['postname']) . '[^_]*\K_.*~',
'',
array_map('strtolower', $files)
)
)
)
)
);
["hakim","henry"]