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

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

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

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

Ajax

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

Q&A

解決済

2回答

1414閲覧

Laravel:Ajaxを使って画面の一部を動かす

hntake

総合スコア9

Laravel

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

Ajax

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

0グッド

0クリップ

投稿2022/12/13 03:06

編集2022/12/13 04:36

前提

10問の問題のテストが多数存在するアプリです。

Ajaxは超初心者です。
Larevelは理解していると思います。

実現したいこと

例えば、テスト番号20番のテストの、第一問の解答だけを見たいときに、クリックしたら、そこに解答を表示する様にしたいです。

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

クリックするとNULLになります。

localhost/ja1/{id}にアクセスすると["\u6708\u66dc\u65e5"]のような表示ですが、デバッグすると解答がキチンと表示されます。

コントローラからjsonへのデータの渡し方を理解していません。色々調べたのですが、見つけることが出来ませんでした。

どなたかご教授いただけたらと思います。よろしくお願いいたします。

該当のソースコード

php

1Route::get('ja1/{id}',[App\Http\Controllers\StudyController::class,'one'])->name('one'); 2

php

1class StudyController extends Controller 2 3 public function one( $id) 4 { 5 $word = Word::where('id', $id)->value('ja1'); 6 return response()->json([ 7 $word 8 ]); 9 }

php

1view 2 <script> 3 $(function(){ 4 $('#button1').click( 5 function(){ 6 $.ajax({ 7 type:'GET', 8 url:'ja1/[$id]', 9 dataType: 'text', //json形式で受け取る 10 }).done(function(results) { 11 $('#text1').html(results); 12 }).fail(function(err) { 13 alert('ファイルの取得に失敗しました。'); 14 }); 15 } 16 ); 17 }); 18 </script>

試したこと

以上のコードはこちらのサイトを参考に作りました。
https://laraweb.net/surrounding/4217/
https://harumakiii.com/archives/430

うまくいかなかったので、以下のサイトでやってみましたが、こちらでは500エラーになったので、上記のサイトのみで作りました。
https://makitweb.com/fetch-records-from-mysql-with-jquery-ajax-laravel/#route

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

Laravel8

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

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

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

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

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

guest

回答2

0

500エラーということはサーバーサイドの問題でしょう
ajaxではなく直接urlで開いたときに戻り値が想定通りかである程度判断はつくと思います

参考

以下test.jsonというテキストファイルを作って非同期で呼んでみてください
//test.json

JSON

1["\u6708\u66dc\u65e5"]

html

javascript

1window.addEventListener('DOMContentLoaded', ()=>{ 2 fetch('test.json').then(x=>x.json()).then(console.log); 3});

上記で問題なければ、直接アクセスと、XHRでのアクセスのサーバー反応の違いだと思います

投稿2022/12/13 03:18

編集2022/12/13 04:46
yambejp

総合スコア114843

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

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

hntake

2022/12/13 04:36

回答ありがとうございます。 試したことの内容が分かりにくくて申し訳ありません。(修正してみました) つまり、直接urlで開いたときに戻り値が["\u6708\u66dc\u65e5"]になっているのが問題なのでしょうか? ダブルクオーテーションを外しコード表記にならないようにする方法を調べてみようと思います。
yambejp

2022/12/13 04:43

> ["\u6708\u66dc\u65e5"]になっているのが問題なのでしょうか? 直接開いて500エラーがおきずエンティティ状態でもどってくるのであれば、サーバーがでxhrでの要求を拒否している可能性はありませんか? ご提示の処理はJSONで「["月曜日"]」を受け取っているので、JSONデータとしては問題ありません
hntake

2022/12/13 05:28

回答ありがとうございます。 やってみます。
guest

0

ベストアンサー

js

1url:'ja1/[$id]',

ここはJavaScriptの世界なのでPHPの$idはただの文字列。

js

1url: 'ja1/{{ $id }}',

{{ }}でこの中だけPHPの世界にする。

これが使えるのはbladeに直接JSを書いてる場合のみ。
JSファイルに書いたら{{ }}は当然動かない。
また質問することになるだけなのでそもそもbladeにJSを書く使い方が間違い。
「初心者が書いてる変なブログ」はさっさと卒業して正しいLaravelの使い方を覚えた方がいい。
jQueryなんてもはや一切出てこない。
やりたいことが質問に書いてるような程度の用途ならjQueryよりLivewire使う方が遥かにマシ。
「VueやReact>Livewire>>>>>>>>>フロントから入門してる最近の初心者の技術レベル>>>>>bladeに直接書いてるjQuery」くらいの差がある。

投稿2022/12/13 04:37

kawax

総合スコア10377

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

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

hntake

2022/12/13 04:55

回答ありがとうございます。laravelは分かってきているつもりでした。やっぱり、まだまだ知らないことがあるんですね。JSも別ファイルですね。勉強になります。ありがとうございます。 お陰様で、文字化けの状態ですが、表示されるようになりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問