我创建了一个消息系统,允许用户向彼此发送消息。这工作正常,但当他们回复我不希望他们被带到另一页时,我想要一个警告说“已发送”或“未发送”。下面是我的代码,它不起作用。
在php中:
echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">";
的javascript:
function send(reply)
{
var httpRequest;
make_request()
function stateck()
{
if(httpxml.readyState==4)
{
alert (httpxml.responseText);
}
httpxml.onreadystatechange=stateck;
reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>";
httpxml.open("GET",reply_url,true);
httpxml.send(null);
}
}
我正在使用php php变量,因为这些数据需要从数据库中访问。
由于
答案 0 :(得分:2)
由于表单提交已发生,因此您转到了其他页面。如果您不希望表单提交,请使用
onsubmit="send(reply); return false;"
顺便说一句,您可以使用单引号:echo'...',这样您就不需要转义字符串中的所有双引号。
答案 1 :(得分:2)
您需要通过在提交处理程序中返回false来告诉浏览器您自己处理了事件:
echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">";
此外,您的发送功能看起来会产生错误,这将导致浏览器提交。您没有在任何地方分配httpxml。我猜你真的想要:
function send(reply) {
var httpxml;
httpxml = make_request();
stateck = function () {
if(httpxml.readyState==4){
alert (httpxml.status);// you will want to check the server response code too
alert (httpxml.responseText);
}
};
httpxml.onreadystatechange=stateck;
reply_url="compose.php?reply=" + reply.value + "&msgid="<?php echo $msgid; ?> + "&to="<?php echo $to; ?> + "&subject="<?php echo $subject; ?>";
httpxml.open("GET",reply_url,true);
httpxml.send(null);
}
答案 2 :(得分:0)
答案 3 :(得分:0)
通常,如果您想通过Ajax返回内容,则需要避免提交页面。但是,如果您希望用户感觉他们正在提交表单,请在页面上放置一个普通按钮(即非提交按钮),该按钮将充当您的Ajax提交按钮。将您的Ajax更新功能绑定到onclick,并将PHP页面指向请求,以便在响应中发送您想要的任何结果。其他所有内容(将结果文本弹出到字段等中)应该只是标准的Ajax和JavaScript。
答案 4 :(得分:0)
我同意Natrium。一个javascript库是要走的路。我更喜欢原型/ scriptaculous,使用原型快速介绍ajax参考以下