プロが教える店舗&オフィスのセキュリティ対策術

javascriptにて、
オブジェクトのactionにphpベースのURLを指定し、javascriptのsubmit()でPOSTを引き継ごうとした場合、セッションで保持していた変数が消えてしまうのですが、これは仕様でしょうか。
ちなみに通常のINPUT TYPE="submit"では、セッションが維持されます。

目的としては、javascriptのsubmit()でも、INPUT TYPE="submit"のボタンを押したときでも、同様にセッションを維持できるようにしたいのですが、javascriptのsubmit()でセッションの内容が消えてしまうのであれば、何か回避方法はないでしょうか。

以上、よろしくご教唆ください。

A 回答 (2件)

<ただ、イベントハンドラーの中から使う場合は、return false;だと


フォームがサブミットされないみたいです。>
==>
はちょっと誤解してました。
<form onsubmit="hoge(elm)">
----
<input type="submit" value="サブミット">
</form>

function hoge(){
-----
return false;
}
だとサブミットされないという事でした。この場合もjavascriptで
submitするとサブミットされます。

ちなみに、
その他、単純なパターンをいろいろ作って試しましたが、
[javascript submit()でセッションの内容が消えてしまう]
は再現出来ませんでした。(IEでもFirefoxでもchromeでも)
    • good
    • 0
この回答へのお礼

yyr466さん
色々調べていただきありがとうございます。
かなりいろんな問題があったようです。ただこの現象については、formを名前してで呼び出す際、同一ページにある複数のformの意図したフォームではないほうをsubmitしており、そこがセッションの接続、切断をしていたためでした。

お手数をおかけして申し訳ありません。しかしながらyyr466さんのアドバイスが心強かったため、早期のバグ発見にいたりました。
大変感謝しております。
もう一点、Forms['フォーム名']['name']としたところ、object型が返されたのですが、他のinputで<input name='name'.....
としており、このバグの発見に難航していました。
また、
<input name='submit'......
という箇所もあったのですが、このようなjavascriptの予約語を使うと、javaScriptで予約されているmethod名,property名が使用できない。というこれまた初心者のミスを犯しました。
他の方のご参考までに恥をあげております。
いろいろご教唆いただきありがとうございます。

お礼日時:2010/08/20 11:50

これは仕様でしょうか。


==>仕様を見ると
まず、 HTMLFormElement の仕様
http://www.w3.org/TR/DOM-Level-2-HTML/html.html# …
Methods
submit
Submits the form. It performs the same action as a submit button.
No Parameters
No Return Value
No Exceptions
とあります。ボタンと同じはずです。
さらにMDCのDOMリファレンスの仕様を見ると
https://developer.mozilla.org/en/DOM/form.submit
This method does the same thing as clicking the form submit button.

Event handling markup like onsubmit="return false;" will not be evaluated when calling the submit method from code. The above code snippet will try and cancel the submit event which will not work when calling the submit method from code.

If a form control (such as a submit button) has a name or id of submit it will mask the form's submit method.
とありました。
やはり、ボタンクリックと同じ動きのはずです。

ただ、イベントハンドラーの中から使う場合は、return false;だと
フォームがサブミットされないみたいです。

後、考えられる原因は、どこかでcookieが弄られていて、同じセッションと
みなされなくなったとか、ブラウザーのセキュリティ設定とかが関係してる
のかも?

この回答への補足

ご回答いただきありがとうございます。
ブラウザーのセキュリティ設定など一旦調べてみることと、イベントハンドラからの動作とsubmit()の動きをチェックしてみます。改めて報告します。

補足日時:2010/08/18 19:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!