Ajax Form иногда работает, иногда работает и обновляется, иногда обновляется и выходит из строя ... Вау? - PullRequest
3 голосов
/ 11 декабря 2011

У меня есть форма 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 ]

1 голос
/ 11 декабря 2011

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>

потому что в противном случае подумайте о том, что произойдет, когда вы нажмете клавишу ввода, в то время как у вас есть фокус на текстовое поле с идентификатором 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() {}, не работает ли интернет-соединение или что-то еще произошло, и дать пользователю сообщение об ошибке.

Проверьте в PHP, отправляются ли данные (isset($var)), потому что в противном случае, возможно, кто-то поиграет с вашим сайтом и перейдет на страницу и получит сообщения об ошибках, а это было бы нехорошо.

0 голосов
/ 11 декабря 2011

Ответ был дан выше, но позвольте мне добавить лучший способ сделать что-то подобное - вернуть false.Когда вы вернете false, вы не сможете отправить форму (в случае ошибки).

Итак, допустим, у меня есть форма, frmMain;мы нажимаем кнопку, она должна выполнить некоторую проверку и, в случае успеха, получить некоторые данные с сервера через AJAX, а затем опубликовать форму.В функции jjcript ajax я буду вызывать AJAX server.php, но также возвращать FALSE для onsubmit (форма).Это остановит выполнение формы.Когда AJAX server.php отправляет обратно ответ, если это правильный ответ, тогда в jscript я помещаю frm.submit или, другими словами, публикую форму после того, как ajax что-то вернул.Но обратите внимание: когда форма отправляет сообщения, она выполняется из jscript / после успешного завершения ajax.

Надеюсь, это было полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...