我有一个简单的 AJAX 函数,当用户单击发送 HTML 文本区域文本的按钮并提醒来自后端的响应时调用:
send_button.onclick = function ()
{
var ajax = new XMLHttpRequest();
var text = text_input.value;
ajax.onreadystatechange = function ()
{
if (ajax.readyState == 4 && ajax.status == 200) alert(ajax.responseText);
};
ajax.open("POST", "write.php", true);
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
ajax.send("text=" + text);
};
以及后端的 PHP 脚本,它应该将接收到的文本写入文件并回显文件的内容:
<?php
$filename = "preview/preview.html";
$text = (isset($_POST["text"]) ? $_POST["text"] : "");
try
{
$fh = fopen($filename, "w+");
if (!$fh) throw new Exception("File open error");
fwrite($fh, $text);
$filetext = (filesize($filename) > 0 ? fread($fh, filesize($filename)) : "");
echo $filetext;
fclose($fh);
}
catch (Exception $e)
{
header("Location: error.php");
}
?>
但是每次响应都是空的。我尝试回显一个硬编码字符串而不是 fread()
,它起作用了,我还尝试回显 filesize($filename)
,它也工作得很好。
AJAX 函数发送的 POST 数据也通过了,并且 fwrite($fh, $text)
函数完全按照预期的方式进行。
我做错了什么?
最佳答案
您没有倒回文件:
- 你打开你的文件进行写作
- 你写了一些文本 - 文件指针在文件的末尾
- 您尝试从文件中读取一些文本,但指针位于文件的末尾
- 没有读取数据,所以你输出一个空字符串
为什么不使用更像这样的东西:
file_put_contents('preview/preview.html', $_POST['text'], FILE_APPEND);
readfile('preview/preview.html');
“无法读取文件”是没问题的,但是所有的打开/写入/读取业务都是多余的,可以减少到上面两行代码。
关于javascript - Php fread() 函数不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27511088/