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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Ajax

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

Q&A

解決済

1回答

2577閲覧

Laravelでajaxが1回目だけ動かない

misskabu

総合スコア28

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Ajax

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

0グッド

0クリップ

投稿2019/09/08 04:02

前提・実現したいこと

ボタンを押した時にajaxでhtmlを読み込みたい

発生している問題・エラーメッセージ

起動ボタンを押した時に1回目だけ効かない。2回押すと起動する。
ボタンで起動するjs関数の中身のalertは初回から動作しているのでajax部分だけが2回目からしか動かない。
どなたかわかる方はいませんか?

該当のソースコード

js

1function ajax_get(){ 2 3 alert("外部jsテスト"); //ここだけ初回から動くためjsファイル自体へのリンクは通っている 4 $(function(){ //この行以降が2回目からしか動作しない。 5 $('#button2').click( 6 function(){ 7 $.ajax({ 8 type:'GET', 9 url:'ajaxtest', 10 dataType:'html', 11 }).done(function (results){ 12 $('#text').html(results); 13 }).fail(function(jqXHR,textStatus,errorThrown){ 14 alert('ファイルの取得に失敗しました。'); 15 console.log("ajax通信に失敗しました") 16 console.log(jqXHR.status); 17 console.log(textStatus); 18 console.log(errorThrown.message); 19 }); 20 } 21 ); 22 }); 23} 24

ajax起動ボタンと結果表示領域のid指定

php

1 <input type="button" id="button2" value="外部jsテスト" onclick="ajax_get()"><br/> 2 <div id="text"></div>

jsファイルの読み込み

php

1 <head> 2 <meta charset="utf-8"> 3 <!-- BootstrapのCSS読み込み --> 4 <link href="css/bootstrap.min.css" rel="stylesheet"> 5 <!-- jQuery読み込み --> 6 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 7 <!-- BootstrapのJS読み込み --> 8 <script src="js/bootstrap.min.js"></script> 9 <script type="text/javascript" src="{{ URL::asset('js/mystore.js') }}"></script> 10 </head>

試したこと

GoogleCromeとSafariで動作確認しましたが、同じ結果。
サーバーを再起動しても同じ結果になりました。
初回だけページの最後までタグが読めていないのかと思い
ぼたんのonclickを$(function(){ajax_get()})
と囲ってみましたが結果は変わりませんでした。

補足情報(FW/ツールのバージョンなど)

PHP 7.2
Laravel5
blade
macOS

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

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

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

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

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

guest

回答1

0

ベストアンサー

click() メソッドはリスナを登録するのみです。
(ボタンを押したときに、 click() に渡した function を実行してねと伝えるのみで実行するわけではない

ので、現状の動きだと

  • ボタンを押す
  • onclick にある ajax_get() が実行される
  • ajax_get() ではリスナが登録される ( 前述の通り click の中身が実行されるわけではない
  • 1度目はリスナが登録されるだけで ajax は走らない
  • 2度目は #button2 にリスナが登録されているので、押すことでリスナの中身が実行される

そのため修正をすると

javascript

1 2$(function(){ // HTMLが読み込まれた際に実行 3 // ボタンが押されたときではなく、HTMLが読み込まれた段階でリスナをつけてしまう 4 $('#button2').click(function(){ 5 $.ajax({ //... 6}

html

1<!-- リスナはもうついているので、 onclick は不要 --> 2<input type="button" id="button2" value="外部jsテスト"><br/>

となるかと思います

投稿2019/09/08 06:01

編集2019/09/08 06:03
unhappychoice

総合スコア1531

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

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

misskabu

2019/09/08 06:17

出来ました!ありがとうございます。 詳しい解説に正解まで書いて頂いて、しっかり理解出来ました。 おっしゃる通りリスナーの登録と実行命令を勘違いしていました。 <input type="button" onclick>から <body onload>へ移動したら期待どうりに動作できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問