人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Pythonにてデータベースから取得したデータを、HTMLのテキストボックスにオートコンプリート機能で表示するという仕組みを実装したいと考えております。
このような仕組みはAjaxを利用して実装するのだと自分では思っています。
そこでPythonとAjaxの連携の情報がを検索したのですが、あまり無いようでよく分かりませんでした。

自分はAjaxを実装した事がありません。
Ajaxと言えば、JSON化されたデータが書かれたサーバ内のファイルを処理が発生した際に非同期で取得しにいく処理だと理解しております。
PHPの情報では、XMLHttpRequestを利用してJSONデータのやりとりを行うようですが。
どのようにPythonでAjaxと連携すればいいのか教えていただけないでしょうか?
簡単でも良いのでコードなど頂けたら幸いです。

また、上記のことを考えている際に以下の疑問が出てきました。
PythonからデータをJavaScriptに送れれば別にAjaxを実装する必要も無いのかなとも思いました。

以上長くなりましたがアドバイスいただけたら幸いです。
宜しくお願いいたします。

環境:
Python2.6
Django1.6.2
jQuery最新版

●質問者: yujinTODO
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

普通の HTML も、Ajax によるデータの取得も、Webサーバ側は、

だけです。

Django を使ってるということは、response header に対する意識は、あまりしたことは無いでしょうか?


サーバ側の Python の例は、こちら。
http://rayed.com/wordpress/?p=1508

Django を使わず、素の CGI として動かすときの Python スクリプトは、こんな感じ。
http://datatables.net/forums/discussion/9920/python-backend-json-dump-via-jquery-ajax-call


クライアント側は、jQuery を使って良いなら、getJSON メソッドを使うのが良いと思います。
http://hayageek.com/jquery-ajax-json-parsejson-post-getjson/#get-json

もし、jQuery を使わないなら、こんな感じ。
https://mathiasbynens.be/notes/xhr-responsetype-json


PythonからデータをJavaScriptに送れれば別にAjaxを実装する必要も無いのかなとも思いました。

「送れれば」というのが、オートコンプリートを動作させるページを表示するときの Python スクリプトで、オートコンプリートに必要なデータをすべて埋め込んでおく、ということであれば、それも、ひとつのやり方だと思います。
必要なデータのサイズが、たいした大きさではない、という条件は付きます。
オートコンプリートの機能を使う必要が無い場合でも、毎回データが送られるわけですから。

データの取り直しは、通常はページのリフレッシュが必要です。
一度、表示されたページをリフレッシュすることなく、Python スクリプトを経由してデータを取り出す、という方法(のひとつ)が Ajax です。


yujinTODOさんのコメント
ご回答ありがとうございました。 ご紹介していただきましたサイト、読ませていただきました。 そこで一つ分からなかった事があったのですが、 ご紹介頂きましたhttp://rayed.com/wordpress/?p=1508、 そのままですと、レンダリング出来ないと思います。 こういうものはレンダリング出力するメインのもの(例えばdef main(request))とは”別に”def ajax(request)を作成しておいてJSONデータをAjaxにより引き受けるときだけアクセスするようにすると考えて宜しいのでしょうか? 自分が言っていることが分かりにくいとは思いますが、 1. def main()からレンダリングするmain.htmlを作成 2. def ajax()を作成し、ajax.htmlを作成 3. main.html内のjQueryにて$.getJSON('/ajax.html', function(data){});などのようにJSONデータを取得 のようなことです。 自分が試したところ、def ajax()から送られたJSONデータを拾い上げることが出来ませんでした。 やり方がおかしいのかもしれませんが。

a-kuma3さんのコメント
>> こういうものはレンダリング出力するメインのもの(例えばdef main(request))とは”別に”def ajax(request)を作成しておいてJSONデータをAjaxにより引き受けるときだけアクセスするようにすると考えて宜しいのでしょうか? << そうです。 Python で、何種類もページを用意するときと同様に、そのうちのひとつ(というか、Ajax で実現したいことの数だけ)を Ajax ように実装します。 >> 自分が試したところ、def ajax()から送られたJSONデータを拾い上げることが出来ませんでした。 << まず、Ajax からではなく、ブラウザからリクエストを投げてみて、レスポンスを確認してください。 新しく Ajax 用に用意したリクエストの URL が []http://mysite.com/ajax.html[] だったら、ブラウザのアドレスバーから、その Ajax 用の URL を打ち込んで、画面に、自分が出力してるであろう JSON 形式のデータが表示されることを確認してください。 -404 や 500 などのエラーが出ていないか -JSON として正しい形式になっているか これが正しければ、javascript 側の実装が、どこかまずいのだと思います。 まずは、Python 側なのか、javascript 側なのかを切り分けましょう。

yujinTODOさんのコメント
この度はまことにありがとうございました。 def ajax()に対応するページを作成してgetJSONにて読み込んでみたところ上手くデータを取得することが出来ました。 親切丁寧に教えていただきましてありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ