保存对文件的更改而不重新加载页面
Save Changes to File Without reloading Page
现在我有一个HTML文本区域,它从文本文件中获取内容。我想做的是允许用户在文本区域编辑文件,当他们按下按钮时,更改会被推到文件中,而无需重新加载整个页面。
我知道单用javascript是不能做到这一点的,因为它是一种客户端语言,但我想也许可以用AJAX来实现这一点?我没有太多AJAX的经验,所以这可能不起作用。
为了简单起见,我想远离websocket。
下面是我的PHP文本区域代码:
<?php
$myfile = fopen($file, 'a+');
echo "<textarea id='demo'>";
// go through each line in the file, print its contents.
while(!feof($myfile)) {
echo fgets($myfile);
}
echo "</textarea>";
?>
在不刷新整个页面的情况下,您可以使用jquery ajax更新文本区域。当您在index.php上单击save changes
时(在我的示例中),我们通过其id="demo"
获得文本区域的值,并将其发送到update.php。在update.php中,我们使用fwrite()
清除所有现有文本,并将从textarea
获得的新内容写入其中,并像在index.php
中那样显示新文本。
这就是index.php
:
<!DOCTYPE HTML>
<html>
<head>
<title>TextArea Lesson</title>
<style>
div{
margin:0 auto 0;
width:400px;
height:300px;
}
#demo{
margin-left:5px;
width:390px;
height:200px;
}
</style>
</head>
<body>
<div>
<form method="POST">
<fieldset>
<legend>Ajax Update Text Area</legend>
<?php
$myfile = fopen('test.txt', 'r');
echo "<textarea id='demo'>";
// go through each line in the file, print its contents.
while(!feof($myfile)) {
echo fgets($myfile);
}
echo "</textarea><br>";
?>
<input type="submit" id="save" value="Save changes" />
</fieldset>
</form>
</div>
</body>
</html>
<script src="https://code.jquery.com/jquery-1.12.2.min.js"
integrity="sha256-lZFHibXzMHo3GGeehn1hudTAP3Sc0uKXBXAzHX1sjtk="
crossorigin="anonymous"></script>
<script>
//when you click save changes, we get its id="save"
//and prevent default submission
$(document).on("click", "#save", function(e){
e.preventDefault();
//get the textarea data bu its id="demo"
var textdata = $('#demo').val();
mydata= 'testdata='+textdata;
$.ajax({
type:'POST',
data:mydata,
url:'update.php',
success:function(data) {
if(data){
alert('Saved!');
$("#demo").html(data);//load data from update.php
}else{
alert('Update failed');
}
}
});
});
</script>
Update.php
:
<?php
$data_to_write = $_POST['testdata'];
$file_path = 'test.txt';
$file_handle = fopen($file_path, 'w');
fwrite($file_handle, $data_to_write);
fclose($file_handle);
$myfile = fopen('test.txt', 'r');
while(!feof($myfile)) {
echo fgets($myfile);
}
fclose($myfile);
?>
和test.txt
:
那只大而敏捷的棕黑色狐狸跳过一只懒狗。
我希望这能对你有所帮助。注意:这只是一个工作代码,仅供学习之用。因此,无法确保安全检查和数据验证。
好吧,你有几个简单的方法。
- 你可以有一个隐藏的iframe。当用户点击提交表单时,您会调用一个函数来获取字段的值,并将其发送到隐藏框架中的表单,然后使用JavaScript提交表单
- 您可以使用XMLHttpRequest();创建一个php页面,接收传递给它的数据。使用XMLHttpRequest()调用页面;从表单发送数据
方法2更优雅。
相关文章:
- 创建新数据和加载现有数据需要单独的视图吗
- 钛 - HTTPClient:打开新的控制器加载
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- 路由到新页面时加载不起作用
- 如何在新窗口完成加载后执行某些内容
- 使用新标题重新加载 html 页面
- Primefaces在打开新页面时加载数据消息
- Wordpress音频播放器和平滑状态.在新页面重新加载播放器时调用什么回调函数
- 用新数据重新加载renderer3d
- 文本不被渲染后,新的页面加载- JQuery移动
- 需要在新标签中加载pdf/doc文件,而不是下载,只是想在浏览器中阅读
- 用新参数重新加载页面
- Js和CSS不检测新页面何时加载
- 在新页面上加载一个flash视频,它在上一页上的位置
- 在新窗口中加载代码编写器视图
- 在控制台中使用新脚本重新加载页面
- 如何在加载新页面后加载AJAX数据
- 如何使用jQuery在新窗口中加载页面,然后关闭它们
- Jquery没有看到新的HTML加载到对话框中
- 无法用新值重新加载JGrid