質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

1182閲覧

jQueryの同期ajaxを使用すると、ブラウザの「戻る」で戻ったとき、リロード?されるのを止めたい

hakase

総合スコア107

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2018/06/23 08:26

こんにちは。

Javascript

1<!DOCTYPE HTML> 2<html> 3<head> 4<meta charset="utf-8"> 5<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> 6<script type="text/javascript" src="js/common.js"></script> 7<title>Test</title> 8<script> 9function Jump(){ 10 var result = $.ajax({ 11 type: 'POST', 12 url: url+'test.php', 13 data: {data:0}, 14 async: false 15 }).responseText; 16 location.href='jump.html'; 17} 18window.onload=function(){ 19 alert('come'); 20} 21</script> 22</head> 23<body> 24<p><button onclick='Jump();'>Jump</button></p> 25</body> 26</html>

な同期ajaxコードを書くと、jump.htmlからブラウザの「戻る」で戻るとリロードされて、alert('come')が再び実行されます。同期ajaxだけ削除するとcomeは再び出ません。

パラメータにcacheとかありますが、true,falseを入れて見ましたが変化無しでした。

どうしてもリロードされてしまうものなのでしょうか?それとも止める方法があるのでしょうか?困っています。何卒アドバイスをお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

windows.onloadは リロードした時に回避する方法はないと思います。

onloadは回避できませんが、その中の処理(alert)については、最初にそのページを開いたときのみ実行させることは可能です。

まず思いつくのはcookieに処理したか、しなかったかのフラグを残す方法です。

ページ開いたときcookieを見てフラグがなければ実行しcookieに実行したことを示すフラグを立てます。
2回目開いたときには同じcookieを見るとフラグがすでに立っているため処理をスキップさせることができます。

投稿2018/06/23 09:17

euledge

総合スコア2404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakase

2018/06/23 09:28

スマホアプリのローカル環境での使用を考えているのですが、Androidはクッキーが使えないので、いろいろ苦労しています。アドバイスありがとうございました。
euledge

2018/06/23 10:24

androidのことはあまり良くわからないのですが、HTML5のWebStorageは使えないでしょうか?同じ考え方でできるかと思います。
hakase

2018/06/23 11:33

ローカル環境には無いみたいです。また出来たとしても、実際はサーバからJSONデータを入手して、jQueryのappendでぺーじ本体をほぼ生成しているのですが、サーバ環境で試したのですが、リロードされた時点で途中でreturnしても、ほとんど空ページになってしまいました。良く考えれば当たり前ですね。リロードそのものを止めないとどうしようも無いようです。再描画するとスクロール位置が先頭に変わってしまうので、なんとかしたいと思いましたが、目をつむるしか無さそうな気がして来ました。
hakase

2018/06/23 11:34

Javascriptでスクロール位置を取得できたかも知れないなー。検索してみよう!
euledge

2018/06/23 11:42

題名みた感じだとどう見ても通常のWebアプリにしか見えないので Androidとか使っているフレームワークなどの情報を追記したほうが、別の知見のある人からも見てもらえると思います。
hakase

2018/06/25 04:38

そうですね。webviewなんですけど、ローカル環境のHTMLを参照する(file://)んですよ。ご指摘ありがとうございましたー。
guest

0

スマホアプリやWebviewなどの知識はほとんどないのですが

そもそもなぜ
・onloadイベントで条件分岐もないalertを実行しているのか
・ajaxでtest.phpにデータをPOSTした後でjump.htmlへリダイレクトする必要があるのか

が分からないですね。

・"come"をAlertする理由
・test.phpは何か
・jump.htmlは何か

を書いていただけると、根本的解決につながるかもしれません。

投稿2018/06/26 06:07

unorigino

総合スコア128

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hakase

2018/06/26 09:03

解決したいことをわかりやすくしたくて、簡素化したコードを載せました。本来やりたいかったのは、表示内容が簡素かされた投稿一覧があって、投稿を選ぶと、詳細の投稿が出るというWebアプリです。"come"をAlertする理由はリロードされることがわかるためで、test.phpはサーバーのデータベースの投稿IDを書き込む物です(AndroidのWebViewのローカルHTML環境ではクッキーが使えないため)で、jump.htmlは詳細投稿を表示するhtml+JSです。jump.htmlからブラウザの戻るをすると、リロードされて一覧が再描画されてスクロール位置が先頭に戻ってしまっていたので、リロードを止めたかったのです。(JSでスクロール位置を取得して保存する方法をこの時は思いついていませんでした)。$.ajaxのわたしの知らない設定で簡単にリロードを止められるだろうと思って質問しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問