2011-12-11 90 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],我會向您發送一個或兩個簡單的例子,以便您瞭解這個想法。 –

相關問題