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

时间:2009-06-03 12:03:51

标签: javascript

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

在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变量,因为这些数据需要从数据库中访问。

由于

5 个答案:

答案 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)

您可以考虑使用JavaScript库。为什么在已经存在时重新发明轮子?

示例:

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我同意Natrium。一个javascript库是要走的路。我更喜欢原型/ scriptaculous,使用原型快速介绍ajax参考以下

http://www.prototypejs.org/learn/introduction-to-ajax