2012-12-10 51 views
0

的所有字段我有一個調用CGI腳本的HTML文件。當我單擊註銷按鈕時,POST方法會發送所有字段。這是一個已知的錯誤?AJAX發送形式爲

這裏是我的Javascript代碼:

var request = null, session = null; 
    function postEscape(val) { 
     return encodeURIComponent(val).replace(/%20/g, "+") 
    } 



    function submit_logout() { 
var request=null 
if(!document.form.loggedIn.checked) return 
logout = new XMLHttpRequest() 
logout.open("POST", "client.cgi", true /* asynchronous? */) 
logout.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 
console.log("action=logout&session=" + postEscape(document.form.session.value)+"&host="+postEscape(document.form.host.value)+"&port="+postEscape(document.form.port.value)) 
logout.send("action=logout&session=" + postEscape(document.form.session.value)+"&host="+postEscape(document.form.host.value)+"&port="+postEscape(document.form.port.value)+"&action=logout") 
form.loggedIn.checked = false 

} 

這是我在POST數據看:

用戶名= &密碼= &主機= somehost.com &端口= 6700 &行動=登出& display = ++++ & session =

這裏是我的表格

<body> 
<form name = "form"> 
<input name="username" size="25" type="text">username<br> 
<input name="password" size="25" type="text">password<br> 
<input name="host" size="25" type="text">host<br> 
<input name="port" size="25" type="text">port<br> 
<input name="login" value="Login" type="button" onclick="submit_login()"><input  type="checkbox" name="loggedIn" id = "loggedIn" onclick="this.checked=!this.checked"> 

<input name="action" value="logout" type="submit" onClick="submit_logout()"><br> 
<textarea name="display" rows="24" cols="68"> </textarea><br> 
<input type="hidden" name="session" value=""> 
<input name="message" size="64" maxlength="64" type="text"><input name="send"  value="send" type="button" onClick = "send()"><p></p> 
    </form> 
+0

你是否從console.log和post發現了不同的值? – KingKongFrog

+0

console.log在這裏沒有返回任何東西。我正在使用Google Chrome的開發者控制檯。 – AccurateEstimate

回答

2

嘗試改變如下:您所提交的一切becayse的type="submit"對於註銷的。它應該是type="button"

<input type="button" />按鈕不會提交表單 - 默認情況下他們不會執行任何操作。它們通常與JavaScript結合使用,作爲AJAX應用程序的一部分。

<input type="submit" />按鈕會在用戶點擊它們時提交他們所在的表單,除非您使用JavaScript指定。從submit_logout()函數內

onClick="return submit_logout();" 

...然後return false;

<input name="action" value="logout" type="submit" onClick="submit_logout()"> 

<input name="action" value="logout" type="button" onClick="submit_logout()"> //type="button" 
+0

你先生,有一個尖銳的眼睛。非常感謝! – AccurateEstimate

1

使用$('form').serialize()

alert($('form[name="form"]').serialize()); 

將顯示所有的表單字段

+0

我實際上可以在URL中看到POST數據,這不是問題。問題是腳本發佈我甚至不打算。 – AccurateEstimate

1

試試這個:

onClick="submit_logout(); return false;" 

或者。

或將按鈕更改爲type="button"

目前由於您的按鈕是type="submit",它會導致表單執行正常(非Ajax)提交。改變類型或返回false將防止這種情況。