Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 迭代ajax响应数据是单独打印字母,而不是整个单词_Javascript_Php_Ajax_Loops - Fatal编程技术网

Javascript 迭代ajax响应数据是单独打印字母,而不是整个单词

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”、

我试图从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”、“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
  • 在php中使用传入值之前验证它。如果它无效,则返回不满意的内容
  • 我通常使用
    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"]