検索フォームに文字を入力しはじめると、
MySQLのテーブルに登録された用語をlike句で検索して、検索候補になるような仕組みを作ろうと考えています。
jQueryでkeyupイベント時に通信し始めるものを作っているのですが、datatypeがhtmlの場合は(.doneの方が使われる)のですが、
jsonの場合はerrorが返ってきます。json形式でやるべきことは何でしょうか。
したこと
AppController.php
public function initialize() { parent::initialize(); $this->loadComponent('RequestHandler');//追加 //略 }
route.php
Router::extensions(['json', 'xml']);//追加
jsファイル
$(function() { $('.search').on("keyup",function(){//keyup $.ajax({ url: "/words/registered", type: "post", dataType: "json",//ここがhtmlの時は.doneが使われる data: { words : $(".search").val() } }).done(function (data) { alert("success"); }).fail(function (data) { alert("error"); }); }); });
コントローラ
class WordsController extends AppController { public function beforeFilter(Event $event) { if (in_array($this->request->action, ['registered'])) { $this->eventManager()->off($this->Csrf); } } public function registered(){ $this->autoRender = false;//json形式で返すため、レンダー機能を無効化 if ($this->request->is("ajax")) { $texts = ["hoge","piyo","huga"]; $this->response->charset('UTF-8'); $this->response->type('json'); return json_encode($texts); } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/09 02:18 編集
2016/07/09 11:09 編集
2016/07/09 12:20