我有一个调用CGI脚本的HTML文件。单击“注销”按钮时,POST方法将发送所有字段。这是一个已知的错误吗?
这是我的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&安培;行动=注销&安培;显示= ++++&安培;会话=
这是我的表格
<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 :(得分:2)
尝试更改以下内容:您正在提交注销type="submit"
的所有内容。它应该是type="button"
。
<input type="button" />
按钮不会提交表单 - 默认情况下它们不会执行任何操作。它们通常与JavaScript一起用作AJAX应用程序的一部分。
<input type="submit" />
按钮将提交用户点击它们时所使用的表单。
<input name="action" value="logout" type="submit" onClick="submit_logout()">
到
<input name="action" value="logout" type="button" onClick="submit_logout()"> //type="button"
答案 1 :(得分:1)
使用$('form').serialize()
alert($('form[name="form"]').serialize());
将显示所有表单字段
答案 2 :(得分:1)
试试这个:
onClick="submit_logout(); return false;"
或者:
onClick="return submit_logout();"
...然后return false;
函数中的submit_logout()
。
或者将按钮更改为type="button"
。
目前因为您的按钮是type="submit"
,它会导致表单执行正常(非Ajax)提交。更改类型或返回false将阻止此操作。