AJAX函数返回Void,如何将PHP fread内容输出到HTML div?附TXT读取函数
解决AJAX返回空值并将PHP读取内容输出到HTML Div的问题
嘿,我来帮你搞定这个问题!看起来你的AJAX返回空值,主要是因为PHP代码没有正确输出最终内容,还有一些逻辑和语法上的小问题。咱们一步步来修复:
1. 修复PHP代码的核心问题
你的PHP代码片段里有几个关键问题:fread参数不全、$output被循环覆盖、最后没有输出内容,还有文件资源没有正确关闭。下面是修改后的完整PHP代码:
<?php $q = $_REQUEST["q"]; $output = ""; if ($q !== "") { $bestand = fopen("Blogs.txt", "r"); if (!$bestand) { echo "Kon geen bestand openen"; exit; // 出错后直接终止,避免后续执行 } while (!feof($bestand)) { $blog = fgets($bestand); $blog = trim($blog); // 去除换行和空格,避免空行干扰 if (empty($blog)) continue; // 跳过空行 $blogParts = explode(",", $blog); $i = 0; foreach ($blogParts as $key) { $i++; if ($i % 2 == 0) { // 偶数位是标题,追加到输出 $output .= "<h3>$key</h3>"; } else { // 奇数位是博客文件名,读取内容 $blogFilePath = "Blogs/$key"; if (!file_exists($blogFilePath)) { $output .= "<p>Blog bestand '$key' bestaat niet!</p>"; continue; } $Blogname = fopen($blogFilePath, "r"); $Blogtext = fread($Blogname, filesize($blogFilePath)); $output .= "<p>$Blogtext</p>"; fclose($Blogname); // 关闭文件资源 } } } fclose($bestand); // 关闭主文件资源 echo $output; // 关键:输出内容给AJAX接收 } else { echo "Geen query ontvangen"; } ?>
2. 前端AJAX代码(原生JavaScript)
接下来写前端代码,发送请求到PHP文件,把返回的内容插入到指定的div中:
<!-- 页面上的目标div --> <div id="blogContent"></div> <script> // 假设你有一个触发AJAX的事件,比如按钮点击 document.querySelector('#loadBlogBtn').addEventListener('click', function() { const q = "your_query_value"; // 替换成实际的q参数值 const xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // 将返回内容插入到div中 document.getElementById("blogContent").innerHTML = this.responseText; } else if (this.readyState == 4) { // 请求失败时提示 document.getElementById("blogContent").innerHTML = "Er is een fout opgetreden bij het laden van de blogs."; } }; xhr.open("GET", "your_php_file.php?q=" + encodeURIComponent(q), true); xhr.send(); }); </script>
3. 关键注意事项
- 确保
Blogs.txt和Blogs目录的权限正确,PHP要有读取权限 - 替换代码中的
your_php_file.php为你的实际PHP文件名 - 如果用POST请求,要调整AJAX的
open方法和发送数据的方式,同时PHP用$_POST["q"]接收 - 记得对用户输入的
q做安全过滤,比如用htmlspecialchars防止XSS攻击
内容的提问来源于stack exchange,提问作者Cinition
相关产品推荐
相关产品推荐

