0

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 データに表示されるものです。

username=&password=&host=somehost.com&port=6700&action=logout&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>
4

3 に答える 3

2

以下を変更してみてください: ログアウトのためにすべてを送信してtype="submit"います。である必要がありtype="button"ます。

<input type="button" />ボタンはフォームを送信しません - デフォルトでは何もしません。これらは通常、AJAX アプリケーションの一部として JavaScript と組み合わせて使用​​されます。

<input type="submit" />ボタンは、JavaScript で別の方法で指定しない限り、ユーザーがボタンをクリックしたときのフォームを送信します。

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

<input name="action" value="logout" type="button" onClick="submit_logout()">  //type="button"
于 2012-12-10T04:41:57.997 に答える
1

これを試して:

onClick="submit_logout(); return  false;"

または:

onClick="return submit_logout();"

...そして、関数return false;内から。submit_logout()

または、ボタンを に変更しますtype="button"

現在、ボタンがtype="submit"あるため、フォームは通常の (非 Ajax) 送信を行います。タイプを変更するか false を返すと、これを防ぐことができます。

于 2012-12-10T04:44:13.630 に答える
1

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

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

すべてのフォーム フィールドを表示します

于 2012-12-10T04:26:47.950 に答える