我有一个ajax表单,它的响应似乎非常不同。有时它可以工作,有时它会刷新,但数据仍然存储,有时它会一起失败,我似乎不知道为什么。
的形式<form >
<label>Name</label>
<input id="textname" type="text"/><br/>
<label>Message</label>
<textarea id="textmsg"></textarea><br/>
<label> </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";
}
HTML应该是:
<form onsubmit="return textin();">
<label>Name</label>
<input id="textname" type="text"/><br/>
<label>Message</label>
<textarea id="textmsg"></textarea><br/>
<label> </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() {}
检查,如果互联网连接是关闭或其他事情发生,并给用户一个错误信息。
检查在PHP如果数据发送(isset($var)
),否则可能有人在玩你的网站,去页面,得到错误信息,这将不是很好。
上面给出了答案,但让我再补充一下,做类似事情的最佳方法是返回false。当返回false时,将停止提交表单(以防出现错误)。
假设我有一个表单,frmMain;我们点击一个按钮,它必须做一些验证,如果成功检索一些输入从服务器通过AJAX,然后发布表单。在jscript ajax函数中,我将调用ajax server.php,但也向onsubmit(表单)返回FALSE。这将阻止表单的执行。当AJAX server.php发送回一个回复时,如果它是正确的回复,那么在jscript中我将form。提交,或者换句话说,在ajax返回某些内容后发布表单。但请注意,当表单做帖子,它完成后,从jscript/ajax已经成功完成。
希望对大家有帮助。