Javascript调用php函数并接收返回的结果


Javascript call php function and receives back results

这篇文章以获取服务器文件列表为例提供了示例代码。 这是我使用的代码:

<html lang="en-US">
<head>
  <meta charset="UTF-8">
    <title>How to create form using jQuery UI</title>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/pepper-grinder/jquery-ui.css" media="screen" rel="stylesheet" type="text/css">  
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js" type="text/javascript"></script>
    <script type="text/javascript">
    $(function() {
    $.get('getfilename.php', { dir : '/ajax1/' }, function(data) {
        // you should now have a json encoded PHP array
        $.each(data, function(key, val) {
            alert('index ' + key + ' points to file ' + val);
        });
    }, 'json');
    alert ("ok");
});
    </script>
</head>
<body>
<h1>Get file names... </h1>
</body>
</html>

获取文件名.php

$dir = $_REQUEST['dir'] ;
$dir = $_SERVER['DOCUMENT_ROOT'] . $dir;
$filesArray = array(); 
$Counter = 0; 
$files = scandir($dir); 
foreach ($files as &$file) { 
    if ($file!='.' && $file!='..' ) { 
        $filesArray[$Counter] = $file; 
        echo $filesArray[$Counter].''; 
        $Counter++;
    }
} 
echo json_encode($filesArray);

我的问题是javascript警报alert('index ' + key + ' points to file ' + val);无法在页面上显示任何内容。 该脚本正在工作,因为我在 Firebug 控制台日志中收到响应。

ajax.jsajax.phpindex.html["ajax.js","ajax.php","index.html"]

我需要在脚本上更改什么才能将此信息返回到 html 页面,以便我可以使用 JSON 进行进一步处理?

谢谢。

通过调试,您破坏了 PHP 中的 JSON 输出。因此,请删除:

echo $filesArray[$Counter].''; 

此外,在任何输出之前,您应该添加 JSON 标头:

header('Content-Type: application/json');

最后,你的 PHP 文件应该看起来像这样:

$dir = $_REQUEST['dir'] ;
$dir = $_SERVER['DOCUMENT_ROOT'] . $dir;
$filesArray = array(); 
$files = scandir($dir); 
foreach ($files as &$file) { 
    if ($file!='.' && $file!='..' ) { 
        $filesArray[] = $file; 
    }
}
header('Content-Type: application/json');
echo json_encode($filesArray);