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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1394閲覧

larave5とajaxでの単語抽出

mhl

総合スコア34

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ajax

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2016/02/22 08:28

編集2016/02/22 08:34

#やりたいこと
http://example.com/article1のような記事URLに

html

1<p>hoge</p> 2<p>sample</p> 3<p>test</p>

というpタグがありそのpタグ内にある単語を動的にserachというURLにパラメーターとして追加していく
例:http://example.com/search?&word1=hoge&word2=sample&word3=test・・・

ajax通信で
searchにアクセスして上記のパラメーターの単語の意味をwordというデータベースから取ってくる。
取ってきたらその単語の意味を

html

1<div class="meaning"></div>

内に表示させるということをしたいのですが、どうやって実装すればよろしいでしょうか?

言語: php
フレームワーク: laravel5.1
データベース: mysql

よろしくお願いします!

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

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

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

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

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

guest

回答2

0

ベストアンサー

まず、フロントエンド側では検索単語の配列を用意したほうが良いでしょう。

var words = ['hoge', 'sample', 'huga'];

まずは、このように複数の単語を渡すことができる状態にしましょう。

これはいくつか方法があると思いますが、私はそこまでシンプルに書ける方でもないので以下のような感じで。

html

1<div id="search_list"> 2 <p>hoge</p> 3 <p>fuga</p> 4 <p>sample</p> 5</div>

javascript

1var words = []; 2$('#search_list p').each(function(index, elem) { 3 words.push($(elem).text()); 4});

で、この配列化した情報をLaravelの方に渡して、ループしてLIKEすれば良いかと。

投稿2016/02/23 01:58

編集2016/02/23 01:59
fagai

総合スコア2158

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

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

mhl

2016/02/23 02:13

ありがとうございます! Laravelの方でループしてLIKE する方法は Controllerに public function search() { $words = \Input::all(); foreach ($words as $word) { $data = Car_terminology::where('word', 'LIKE', '%'. $word. '%') ->get(); } return $data; } としたのですが、これだと最後の単語(いただいたコードだとsample)しかの意味しか取得できなかったのですが、このコードをどう改善すればよろしですか?
fagai

2016/02/23 02:31 編集

public function search() { $words = \Input::all(); $query = Car_terminology::query(); foreach ($words as $word) { $query->orWhere('word', 'LIKE', '%'. $word. '%'); } $data = $query->get(); return $data; } こんな感じで出来ませんでしたっけ(うろ覚えですが) ただし、このようなDBへの処理はレコードが増えれば増えるほど時間がかかるようになるので、問題になってきた頃にチューニングが必要になるでしょう
fagai

2016/02/23 02:40

上記で出来なかったら下記で試してみてください。 public function search() { $words = \Input::all(); $query = Car_terminology::where(function($query) use ($words) { foreach ($words as $word) { $query->orWhere('word', 'LIKE', '%'. $word. '%'); } }); $data = $query->get(); return $data; }
mhl

2016/02/23 09:36

ありがとうございます! 教えていただいたコードでできました!
guest

0

ajax通信を使うという事はJavaScriptを使いますよね?

JavaScriptでPタグの内容を取得して、
Ajaxのパラメータに渡せばよいのではないでしょうか?

投稿2016/02/22 08:34

hato_pato

総合スコア215

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

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

mhl

2016/02/22 08:46

Ajaxでのパラメーター渡しはどうすればよろしいですか? まだ、Ajaxのことをそこまで勉強できていません。 教えていただけないでしょうか?
mhl

2016/02/22 09:20

``` $('p').each(function(i) { var $word = $(this).text(); $.ajax({ url: 'http://example.com/search?', type: 'GET', data: { word: $term }, dataType: "json", success: function(data) { $('.meaning').html('<div>' + data + '</div>'); }, error : function(data){ console.log('error:'+data.data); } }); }); ``` このように書いて laravelのsearchControllerには ``` $search = \Input::get('word'); $data = Word::select('id', 'word', 'meaning') ->where('word', 'LIKE', '%' . $search . '%') ->get(); return $data; ``` とこのように書きました。 これだと、単語抽出はできるのですが、一つの単語の意味しか表示されませんでした。 何度も質問して申し訳ありません。 よろしければ教えてください!
hato_pato

2016/02/22 09:35

Pタグの中に要素は1つしかないので1つの単語しかとれないのでしょう。 Ajax通信したいURLにパラメータを付けないとダメなんですよね? URLに文字列結合でパラメータをつけるようにすれば、良いと思いますよ!!
hato_pato

2016/02/22 09:38

ちなみに、先ほどのコメントは $('p').each(function(i) { ですが、Pタグの中をループしてますよね? 親階層でPタグだったらタグ内の文字を取得してURLにパラメータとして結合してみれば良いと思います。 という意味です。
mhl

2016/02/23 09:36

ありがとうございます! 大変勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問