Ajax:第一个Post很棒,第二个Post返回URL中的数据
Ajax: First Post great, Second Post returns Data in URL
更新:我通过将我的表单提交器脚本从Header移动到jamesmsg.php页面(包含的一个)的底部来解决我的问题。这样,每次刷新div时,函数总是被重新加载并附加到"new"表单。
这是我之前关于提交表单时只刷新一个div(而不是整个页面)的问题的后续问题。我已经剥离了所有不必要的javascript和代码,只专注于这个问题,但我仍然难住了。
当我第一次点击提交时,数据就发布了,我们就好了。当我第二次单击submit时,整个页面刷新,URL现在显示了张贴的数据。好消息是数据是插入到mysql数据库,我只需要得到这个表单的行为正确,就像它做的第一次点击(至少它似乎这样做)。
我的主php文件是james.php:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
</head>
<body>
<div id='mainpage'>
<div id='control'>CONTROL DIV 1 ... 2 ... 3</div>
<div id='statusupdates'><? include 'jamesmsg.php'; ?></div>
</div>
</body>
</html>
所以你可以看到我有一个"Control Div",它应该永远不会改变,我的statusupdates Div应该总是更新与提交的表单数据(并随后从mysql拉显示最新的更新)。
jamesmsg.php (mysql credentials XXX for this post):
<?
$xxx = new mysqli("xxx","xxx","xxx",xxx);
$MsgText = $_POST["MsgText"];
if ($MsgText != "") {
$query = "INSERT INTO Messages SET
MsgDate = NOW(),
MsgAuthor = 0,
MsgText = '" . mysqli_real_escape_string(xxx,$MsgText) . "'";
if (!xxx->query($query)) {
print "error! xxxx->error<BR>query = $query<BR>";
}
}
print "<form id='"statusform'" action='"james.php?L=1'">
<textarea name=MsgText rows=5 cols=40></textarea><BR>
<input type=submit value=Post id=uhsbutton>
</form>";
?>
<?
print "<BR><BR><pre>POST Variables:<BR>";
print_r ($_POST);
print_r ($_GET);
print "</pre>";
?>
<?
$query = "SELECT * FROM Messages ORDER BY MsgDate DESC LIMIT 5";
$msgq = $xxx->query($query);
if ($msgq->num_rows > 0) {
while ($r = $msgq->fetch_array()) {
print ".......<BR>";
print "msg ID: " . $r["ID"] . " - " . $r["MsgDate"] . " " . $r["MsgAuthor"] . "<BR>";
print $r["MsgText"] . "<BR>";
}
}
else {
print "no messages";
}
?>
<script>
/*************************************
* form submitter
**************************************/
$(document).ready(function() {
$("#statusform").submit(function(e) {
e.preventDefault();
var data=$(this).serialize();
var pUrl="jamesmsg.php";
submitFormSave(data, pUrl);
});
function submitFormSave(data, pUrl) {
$.ajax({
url: pUrl,
type: 'POST',
cache: false,
data: data,
success: function(response) {
$("#statusupdates").html(response);
}
}).success(function(){
});
}
});
</script>
你可以通过执行命令:demo
看到它的实际效果在Chrome的控制台查看这个,我没有得到任何错误。
问题在于您为AJAX调用设置的成功回调:
success: function(response) {
$("#statusupdates").html(response);
}
这最终会覆盖整个表单,并且在页面第一次加载时设置的原始submit
事件处理程序丢失。由于没有提供事件处理程序来防止默认行为,因此单击第二个按钮将刷新整个页面。
所以,我要做的是让你的服务器响应以JSON或XML的形式返回数据(最好是JSON,因为它很容易与JavaScript集成)。
现在,您的服务器响应返回HTML。这是你要避免的。服务器应该为您提供数据,然后在客户端,您应该通过JavaScript动态生成HTML,以可读格式显示数据。
我通过将javascript从Header移动到包含页面的底部来解决我的问题:jamesmsg.php.
我现在可以发布并有适当的div刷新,而不需要整个页面总是刷新
- JavaScript 中的 POST url 被注释掉了
- 使用 POST 方法通过 ajax 发送的数据在发送到服务器之前是否必须进行 URL 编码
- Angular 2:HTTP Post Request,带有URL参数和正文类型参数
- 使用表单和POST方法通过Javascript获取URL参数
- 如何在不更改URL的情况下使用HTTP方法POST
- qoxdoo:POST方法,不在URL中显示参数
- 如何在NodeJS中对POST请求进行url解码
- jQuery/PHP-POST-Forbidden(403)当试图在我的JSON数据中发送完整的URL时
- 当使用预先签名的POST url将文件上传到AWS S3时,设置随机文件名
- 获取链接帖子使用脚本“data:post.url”博主不起作用
- 使用Joomla的jRoute库时POST URL的问题
- Ajax Post URL在ASP.net Image Button OnClientClickClick上不起作用
- 使用json和post-url将数据放在Highchart中
- Angular ng包含表单操作Post URL是't工作
- jquery ajaxError post url到新页面
- 博客代码数据:post.Url用作带有图像按钮的可点击链接
- jQuery ajax post URL与查询字符串不能在服务器端获得$_POST
- Jquery .post(url,params) -如果params是字符串如何使用它
- Javascript/JQuery POST "url"未定义(定义)
- 窗体post在iframe重定向父到post URL