2009-06-03 43 views
0

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

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

谢谢

回答

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

由于表单提交发生,它将您带到不同的页面。如果你不希望表单提交的发生,使用

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

顺便说一句,你可以使用单引号:回声“...”,这样你就不必逃避所有的双引号在字符串中。

+0

感谢 但我需要提交表单...并返回什么compose.php发送 – Elliott 2009-06-03 12:22:34

+0

你可以使用AJAX从compose.php获取内容,但不希望表单提交发生将您带到不同的页面(或刷新当前页面)。 – 2009-06-03 12:38:08

0

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