Javascript 使用ajax提交表单并返回结果

Javascript 使用ajax提交表单并返回结果,javascript,Javascript,我创建了一个消息传递系统,允许用户互相发送消息。这很好,但当他们回复我不希望他们被带到另一个页面时,我想要一个警告说“已发送”或“未发送”。下面是我不工作的代码 在php中: echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">"; echo”“; javascript: function send(reply) { var httpRequest; ma

我创建了一个消息传递系统,允许用户互相发送消息。这很好,但当他们回复我不希望他们被带到另一个页面时,我想要一个警告说“已发送”或“未发送”。下面是我不工作的代码

在php中:

 echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply)\">";
echo”“;
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);
    }
}
函数发送(应答)
{
var-httpRequest;
提出请求
函数stateck()
{
if(httpxml.readyState==4)
{ 
警报(httpxml.responseText);
}
httpxml.onreadystatechange=stateck;
reply_url=“compose.php?reply=“+reply.value+”&msgid=“+”&to=“+”&subject=“”;
打开(“GET”,回复url,true);
httpxml.send(null);
}
}
我使用php变量,因为这些数据需要从数据库中访问


谢谢

由于表单提交发生,您进入了另一个页面。如果您不想表单提交,请使用

onsubmit="send(reply); return false;"

顺便说一下,您可以使用单引号:echo“…”,这样您就不需要转义字符串中的所有双引号。

由于表单提交发生,您需要转到其他页面。如果您不希望表单提交发生,请使用

onsubmit="send(reply); return false;"

顺便说一下,你可以使用单引号:ECHO……,这样你就不需要逃避字符串中的所有双引号。

< P>你可以考虑使用JavaScript库。为什么当它已经存在时重新发明轮子?< /P> 示例:


你可以考虑使用JavaScript库。为什么当它已经存在时重新发明轮子?< /P> 示例:


通常,如果您希望通过Ajax返回某些内容,您希望避免页面提交。但是,如果您希望用户感觉他们在提交表单,请放置一个普通按钮(即不是提交按钮)在用作Ajax提交按钮的页面上。将Ajax更新功能绑定到onclick,并将请求定向到PHP页面,以发送响应中所需的任何结果。其他一切(将结果文本弹出到字段中,等等)应该是标准的Ajax和JavaScript。

通常,如果您希望通过Ajax返回内容,您希望避免页面提交。但是,如果您希望用户感觉他们在提交表单,请放置一个普通按钮(即不是提交按钮)在用作Ajax提交按钮的页面上。将Ajax更新功能绑定到onclick,并将请求定向到PHP页面,以发送响应中所需的任何结果。其他一切(将结果文本弹出到字段中,等等)应该是标准的Ajax和JavaScript。

您需要通过在提交处理程序中返回false来告诉浏览器您自己处理了事件:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">";
echo”“;
另外,您的发送函数看起来将生成一个错误,这将导致浏览器提交。您没有在任何地方分配给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);
 }
函数发送(应答){
var-httpxml;
httpxml=make_request();
stateck=函数(){
如果(httpxml.readyState==4){
警报(httpxml.status);//您还需要检查服务器响应代码
警报(httpxml.responseText);
}
};
httpxml.onreadystatechange=stateck;
reply_url=“compose.php?reply=“+reply.value+”&msgid=“+”&to=“+”&subject=“”;
打开(“GET”,回复url,true);
httpxml.send(null);
}

您需要通过在提交处理程序中返回false来告诉浏览器您自己处理了事件:

echo"<form id=\"form\" name=\"form\" method=\"post\" onsubmit=\"send(reply); return false;\">";
echo”“;
另外,您的发送函数看起来将生成一个错误,这将导致浏览器提交。您没有在任何地方分配给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);
 }
函数发送(应答){
var-httpxml;
httpxml=make_request();
stateck=函数(){
如果(httpxml.readyState==4){
警报(httpxml.status);//您还需要检查服务器响应代码
警报(httpxml.responseText);
}
};
httpxml.onreadystatechange=stateck;
reply_url=“compose.php?reply=“+reply.value+”&msgid=“+”&to=“+”&subject=“”;
打开(“GET”,回复url,true);
httpxml.send(null);
}

我同意Natrium的观点。javascript库是最好的选择。我更喜欢prototype/scriptaculous,通过prototype快速介绍ajax使用prototype。请参阅以下内容


我同意Natrium的观点。javascript库是一个不错的选择。我更喜欢prototype/scriptaculous,通过prototype快速介绍ajax。请参阅以下内容


谢谢,但我需要提交表单…并返回compose.php发送的内容。您可以使用AJAX从compose.php获取内容,但您不希望表单提交将您带到其他页面(或刷新当前页面)。谢谢,但我需要提交表单…并返回compose.php发送的内容。您可以使用AJAX从compose.php获取内容,但您不希望表单提交会将您带到其他页面(或刷新当前页面)。谢谢。如果我在地址栏中手动键入回复url,此功能可以正常工作,但如果我提交了回复的值,则此功能不起作用。看起来它可能未定义。如果回复未定义(我认为是),我不会收到应“发送”的回复然后,reply.value所在的reply_url行将导致错误,并且阻止表单提交的return false技巧将不起作用。如果您使用的是firebug(或IE 8开发工具),请确保您有“在所有错误上中断”“打开此选项,以便在提交之前看到错误,然后松开页面。谢谢。如果我在地址栏中手动键入回复url,则此选项有效,但如果我提交,则此选项无效。回复的值是多少?”?看起来它可能是未定义的。我没有得到一个回复应该是“发送”你有如果回复