这是我的header.php页面,其中包含某些页面的链接,我使用ajax来开发我的网站
<li><a href="log.php" class="ajaxtrigger">login</a></li>
<li><a href="chenge_pass.php" class="ajaxtrigger" >chenge password </a></li>
//some codes
<div id="target"> </div>
这是我的ajax代码
$(document).ready(function(){
$('.ajaxtrigger').click(function(){
var url = $(this).attr('href');
$('#target').load(url);
return false;
});
});
类ajaxtrigger的任何链接都将通过AJAX加载内容并将其显示在具有ID目标的元素中。 我的问题是,当我想要例如更改我的密码并点击链接“更改密码”页面将被调用但文本框未设置(我认为!因为if(isset($ _ REQUEST [“txt2”]))剂量不返回是的!)并且'if'中的所有代码都没有运行 这是我的chenge_pass.php:
<form name="c" action="" method="POST">
last password<input class=fild name="txt2" type="password">
new password<input class=fild name="txt4" type="password" >
repeat new password<input class=fild name="txt3" type="password" >
<input class="btn b2" name="btn" type="submit" value="run">
</form>
<?php
if(isset($_REQUEST["txt2"]))
{
if(!empty($_REQUEST["txt3"]) and !empty($_REQUEST["txt4"]) and !empty($_REQUEST["txt2"]) )
{
$txt3=($_REQUEST["txt3"]);
$txt4= ($_REQUEST["txt4"]);
$txt2=($_REQUEST["txt2"]);
//code for save changes into mysql database
}
}
?>
如何设置文本框以便我可以保存对数据库的更改?
答案 0 :(得分:1)
这个问题有点模糊......但如果我可能试图理解和总结,那就是:“你有一个页面通过AJAX加载 chenge_pass.php 文件。然后提交时,您希望在将字段保存到数据库之前对字段进行一些状态验证。“
如果这是真的......
您的文本字段将无法修复,因为#target
中的内容来自PHP文件 chenge_pass.php ,该文件目前无法在浏览器的历史记录中显示(除非您使用推送-state,这里没有说明。)
因此,当提交表单(其规范中的操作默认为浏览器URL指向的页面)时,页面将重新加载...并且您必须重新触发单击以查看密码表单,敢于我说。
现在我们了解到,这有两个解决方案
完全删除AJAX :这样,您就可以正确加载 chenge_pass.php 文件作为自己的页面。表单提交时,您可以正确查看字段。
通过AJAX 提交您的密码表单:这是我的首选解决方案,因为无论如何都是通过AJAX加载表单。
无论您选择哪种方式,都要修理您所说的内容......
页面将被调用但文本框未设置
......你必须有这样的东西
<input class=fild name="txt2" type="password" value="<?php echo $_REQUEST['txt2']?>">
这样,如果您填充了$ _REQUEST ['txt2'],它就会显示在表单中。
答案 1 :(得分:0)
当您点击表单未发布的链接时,您必须点击<input class="btn b2" name="btn" type="submit" value="run">
按钮发布表单输入。
如果你想要处理ajax,你应该首先删除你的href:
<a href="javascript:void(0);" class="ajaxtrigger" >chenge password </a>
然后您可以通过以下代码发布数据:
$(document).ready(function(){
$('.ajaxtrigger').click(function(){
var url = "chenge_pass.php";
$.ajax({
type: "POST",
url: url,
data: $("form").serialize()
});
});
});
答案 2 :(得分:0)
修改表单:
<form name="c" action="chenge_pass.php" method="POST">
答案 3 :(得分:0)
有点不清楚你在问什么,但从我所看到的,你将把你的表格发布到错误的剧本。
使用ajax加载表单时,请加载此表单:
<form name="c" action="" method="POST">
空action
属性将使表单发布到当前页面/脚本。这是包含您的链接的页面,而不是chenge_pass.php
脚本。
首先,你需要改变它:
<form name="c" action="chenge_pass.php" method="POST">
答案 4 :(得分:0)
我发现您的href链接处于活动状态,所以它在ajax运行之前首先运行所以$ _REQUEST中存在空[&#34; txt2&#34;]为null。通过插入onclick返回false
<li><a href="chenge_pass.php" class="ajaxtrigger" onclick="return false;">chenge password </a></li>
答案 5 :(得分:0)
也许您应该重新考虑代码的架构。如果您使用的是ajax,请尝试将您的视图和您的php进程分开,例如:
application
|
|- controllers
| |
| - change_passoword.php
|
|- views
| |
| - change_password.html
|
|- index.html
的index.html
<html>
<!-- Your html... -->
<li><a href="log.php" class="ajaxtrigger">login</a></li>
<li><a href="chenge_pass.php" class="ajaxtrigger" >chenge password </a></li>
//some codes
<div id="target"> </div>
</html>
<script>
$(document).ready(function(){
$('.ajaxtrigger').click(function(){
var url = $(this).attr('href');
$('#target').load(url);
e.preventDefault();
});
});
</script>
视图/ change_password.html
<form id="myForm" name="c" action="controllers/change_password" method="POST">
last password<input class=fild name="txt2" type="password">
new password<input class=fild name="txt4" type="password" >
repeat new password<input class=fild name="txt3" type="password" >
<input class="btn b2" name="btn" type="submit" value="run">
</form>
<script>
var form = $('#myForm');
form.submit(function(e) {
e.preventDefault();
$.ajax({
url: form.attr('action'),
type: "POST",
dataType: "JSON",
data: $('#myForm').serialize(),
success: function(data) {
// Do something
// data is an object, data.success is a boolean, data.message is the controller message, see controllers/change_passwords.php to understand why
},
error: function(a,b,c) {
console.error("Error during request", b);
}
});
});
</script>
控制器/ change_password.php
<?php
header("Content-Type: application/json");
if (!empty($_POST) && !empty($_POST['txt2']) && !empty($_POST['txt3']) && !empty($_POST['txt4'])) {
// Do your stuff here
if ($allIsFine) { //If everything is fine
echo json_encode(array("success" => true, "message" => "Your password has been changed"));
} else {
echo json_encode(array("success" => false, "message" => "Something went wrong"));
}
} else {
echo json_encode(array("success" => false, "message" => "Please fill and inputs"));
}