ホーム » ブログ » ワンセットでAjax送信とページForm送信の時、注意しなきゃいけないこと
このエントリーをはてなブックマークに追加
@2014/03/26

スポンサーリンク
開発中に、あるボタンを押されたとき、非同期的に二つの処理をさせたいため、一つ目の処理をAjaxで送信させ、二つ目の処理をJSPのアクションを呼びさせた。
僕が書いたソースコードは下記のように
//---------------------------------------------
// ----- 処理1 -----//
//---------------------------------------------
jQuery.ajax({
	async: true,
	type: "GET",
	url: "MyAction!method1.do?sessionId=XXXX",
	cache: false,
	data: {"myParam1":"userId"}
});
//---------------------------------------------
// ----- 処理2 -----//
//---------------------------------------------
execute('MyActiontForm', 'MyAction!method2.do');
何か偶に処理1がカットされた現象を出てしまった。ソースだけを見ると、2つの処理は順番に実行させるはずなのに、・・・・・

原因としては(たぶん)、処理2はFormページのサブミットは結構速くて、処理1のAjaxはまだ準備中の状態に、処理2は先にコミットしたから、処理1はカットされたと思う。

対策はいくつかあると思うけど、ここで例として1つの簡単な対策を挙げます。
それは処理2を実行する前に、sleep時間を空ける。
こんな風に
//---------------------------------------------
// ----- 処理1 -----//
//---------------------------------------------
jQuery.ajax({
	async: true,
	type: "GET",
	url: "MyAction!method1.do?sessionId=XXXX",
	cache: false,
	data: {"myParam1":"userId"}
});
//---------------------------------------------
// ----- 処理2 -----//
//---------------------------------------------
setTimeout(function(){
		execute('MyActiontForm', 'MyAction!method2.do');
	},100);
つまり、処理2を実行する前に、100ミリ秒を待たせる。
これだけで、処理1と処理2を順番に実行できる。

もちろん、ほかの対策は山ことありますが、ここはだけ1つの例です。

本記事の中国語版記事は、姉妹サイトでの「使用jquery.ajax时遇到的请求丢失的问题」へ参考してください。


♪ 当記事がお役に立ちましたらシェアして頂ければ嬉しいです。
0人
このエントリーをはてなブックマークに追加


★ 当記事を閲覧の方は下記の【関連記事】も閲覧していました。

お名前:

 

EMAIL:

 

URL:

 

認証コード:

zanmai.net-safecode

 


※会員の方は認証コードを要らないから、新規登録をオススメ!

check