【问题标题】:Ajax Form Sometimes Works, Sometime works and refreshes, Sometimes refreshes and fails ... Bwah?Ajax 表单有时有效,有时有效并刷新,有时刷新并失败……哇?
【发布时间】:2012-01-17 21:37:19
【问题描述】:

我有一个 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";
    }

【问题讨论】:

    标签: php ajax forms


    【解决方案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)),否则可能有人在玩弄您的网站并转到页面并收到错误消息,这可不好。

    【讨论】:

    • 感谢@micha 返回false;很有意义,我仍然对表单部分感到困惑,但它有效,所以我很高兴。
    【解决方案2】:

    上面给出了答案,但让我添加执行类似操作的最佳方法是返回 false。当您返回 false 时,您将停止提交表单(以防出现错误)。

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

    希望这对您有所帮助。

    【讨论】:

    • 是的,对 javascript 和 ajax 来说还是很陌生。谢谢。
    • 试试 W3schools 的教程。如果仍然遇到问题,请给我发送电子邮件:d_rattansingh@yahoo.com,我会向您发送一两个简单的示例,以便您了解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多