2011-12-11 59 views
3

我有一个Ajax表单,它的响应似乎非常不同。有时它有效,有时会刷新,但数据仍然存储,有时如果一起失败,我似乎无法弄清楚为什么。Ajax表单有时候工作,有时会工作和刷新,有时会刷新并失败... Bwah?

表单

<form > 
    <label>Name</label> 
     <input id="textname" type="text"/><br/> 
    <label>Message</label> 
     <textarea id="textmsg"></textarea><br/> 
    <label>&nbsp;</label> 
     <input type="submit" value="Send" onclick="return textin();"/><br/><br/> 
    <label id="textresult"></label> 
</form> 

jQuery的

function textin() { 
var name = $("input#textname").first().attr("value"); 
var msg = $("textarea#textmsg").first().attr("value"); 
    if (msg==null || msg=="") 
       { 
        alert("Message cannot be Blank"); 
        return false; 
       };   
$.ajax({ 
    url: '<?=BASEURL?>/le-include/textin.php', 
    cache: false, 
    type: "POST", 
    data: {name : name, msg : msg}, 
    success: function (data) { 
     $('#textname').attr('value', ''); 
     $('#textmsg').attr('value', ''); 
     $('#textresult').html(data); 
     $('#textresult').animate({ backgroundColor: $.Color("rgba(2,232,87,1)"), color: $.Color("rgba(0,0,0,1)") }); 
     $('#textresult').animate({ backgroundColor: $.Color("rgba(0,0,0,0)"), color: $.Color("rgba(0,0,0,0)") }); 
    } 
}) 
}; 

textin.php

$name = $_POST['name']; 
$name = mysql_real_escape_string($name); 
$msg = $_POST['msg']; 
$msg = mysql_real_escape_string($msg); 

$ip = $_SERVER["REMOTE_ADDR"]; 

databaseSelect("$database"); 
$sql = "SELECT `ip` FROM `spamip` WHERE ip='$ip' LIMIT 1"; 
$result = mysql_query($sql); 
if(mysql_error()) { print mysql_error(); print '<br/>'; }; 
    $num = mysql_num_rows($result); 
    if($num == 0) { 
     $date = date_create(); 
     $stamp = date_format($date, 'U'); 
     $sql = "INSERT INTO `texts` (`name`, `message`, `date`, `ip`) VALUES ('$name', '$msg', FROM_UNIXTIME('$stamp'), '$ip');"; 
      $result = mysql_query($sql); 
      if(mysql_error()) { 
       echo "Error"; 
      } else { 
       echo "Success"; } 
    } else { 
     echo "Your IP has been marked as Spam"; 
    } 

回答

1

HTML应该是:

<form onsubmit="return textin();"> 
    <label>Name</label> 
     <input id="textname" type="text"/><br/> 
    <label>Message</label> 
     <textarea id="textmsg"></textarea><br/> 
    <label>&nbsp;</label> 
     <input type="submit" value="Send"/><br/><br/> 
    <label id="textresult"></label> 
</form> 

否则想想,当你按下回车键时,你必须专注于文本框ID textname会发生什么

jQuery的应该是:

function textin() { 
var name = $("input#textname").first().attr("value"); 
var msg = $("textarea#textmsg").first().attr("value"); 
    if (msg==null || msg=="") 
       { 
        alert("Message cannot be Blank"); 
        return false; 
       };   
$.ajax({ 
    url: '<?=BASEURL?>/le-include/textin.php', 
    cache: false, 
    type: "POST", 
    data: {name : name, msg : msg}, 
    success: function (data) { 
     $('#textname').attr('value', ''); 
     $('#textmsg').attr('value', ''); 
     $('#textresult').html(data); 
     $('#textresult').animate({ backgroundColor: $.Color("rgba(2,232,87,1)"), color: $.Color("rgba(0,0,0,1)") }); 
     $('#textresult').animate({ backgroundColor: $.Color("rgba(0,0,0,0)"), color: $.Color("rgba(0,0,0,0)") }); 
    } 
}); 
return false; 
}; 

,因为否则的形式将正常公布和不与ajax。

其他信息:

.attr("value")可以在短命令.val()

.attr("value", "")可以在短命令.val("")

阳痿更换更换!我不知道你是否不想,但是你不检查是否有名字。

您可以使用error: function() {}查询互联网连接是否中断或发​​生其他事情,并给用户一个错误消息。

如果发送数据(isset($var)),请检查PHP,否则可能是有人在玩弄您的网站并转到页面并收到错误消息,那就不好了。

+0

谢谢@micha 返回false;使得分配有意义,形式的一部分我仍然困惑,但它的工作,所以我很高兴。 –

0

答案在上面给出,但让我只是添加最好的方式来做这样的事情就是返回false。当您返回false时,您将停止提交表单(如有错误)。

所以,让我们说我有一个形式,frmMain;我们点击一​​个按钮,它必须做一些验证,如果成功,通过AJAX从服务器获取一些输入,然后发布表单。在jscript ajax函数中,我将调用AJAX server.php,但也返回FALSE onsubmit(表单)。这将阻止表单执行。当AJAX server.php发回回复时,如果回复是正确的,那么在jscript中,我把frm.submit,换句话说,在ajax返回一些东西后发布表单。但请注意,当表单发布帖子时,它从jscript/ajax完成成功完成。

希望这有帮助。

+0

是的,它仍然是新的JavaScript和AJAX。谢谢。 –

+0

尝试W3schools的教程。如果仍然遇到麻烦,请发送电子邮件至:[email protected],我会向您发送一个或两个简单的例子,以便您了解这个想法。 –

相关问题