Ajax表单有时候工作,有时工作和刷新,有时刷新和失败...... Bwah?

时间:2011-12-11 15:18:38

标签: php ajax forms

我有一个ajax表单,其响应似乎非常多样。有时它可以工作,有时它会刷新,但数据仍然存储,有时如果一起失败,我似乎无法弄清楚原因。

表格

<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";
    }

2 个答案:

答案 0 :(得分: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的文本框

时按Enter键会发生什么

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() {}核对,并向用户提供错误消息。

检查PHP是否发送数据(isset($var)),因为否则可能有人正在玩你的网站并转到页面并收到错误消息,这不会很好。

答案 1 :(得分:0)

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

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

希望这有用。