2011-06-25 8 views
0

jsonデータをweb2pyコントローラからjQuery dataTableにAJAX経由でロードしようとしています。
空のdataTableのみがレンダリングされます(希望の書式設定、検索ボックスなどで)
私が間違いを犯した場所について私のコードに指摘してください。
データが表示されません(「get_data」メソッドによって返されます)。
データベーステーブルにデータが入力されていることを確認しました。試験目的のため

コントローラweb2pyのjQuery dataTableのJSONデータ

def show_data(): 
    return dict() 

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return custdata 

、Iは "jsonlint.com" に同じ検証&別の方法でresponse.json(CUSTDATA)を返さ。 有効なjsonです。

ビュー(show_data.html)


{{extend 'layout.html'}} 
$(document).ready(function() { 
    var oTable = $('.smarttable').dataTable({ 
     "sScrollY": "200px", 
     "sAjaxSource": "{{=URL('MIS','get_data.json')}}", 
     "sDom": "frtiS", 
     "bDeferRender": true 
    }); 
}); 

最後に、HTMLのテーブルタグは= "smarttable" クラスを使用してテーブルに定義されている

答えて

1

このように、辞書を返す必要がありますあなたのget_data機能: web2pyので

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return dict(data=custdata) 

コントローラのアクションが辞書を返す場合、ビューのみ呼ばれる - それ以外の場合、コントローラ出力Iをそのままクライアントに返されます(custdataはまだJSONに変換されていません)。

URL /MIS/get_data.jsonを呼び出すと、.json拡張子はweb2pyにJSONのレンダリングに使用する/views/MIS/get_data.jsonビューファイルを検索するように指示します。このビューファイルが見つからない場合は、/views/generic.jsonを使用しようとしますが、response.generic_patterns=['json']を指定してそれを上書きしない限り、ローカル要求に対してはgeneric.jsonのみが使用されます。 JSONをレンダリングするためにビューを使用する代わりに

、あなたも行うことができます:

def get_data(): 
    custdata = db.executesql(qry, as_dict=True) 
    return response.json(custdata) 

EDIT:あなたが追加する必要がありますので、jQueryのDataTableのプラグインは、いくつかの特別なパラメータを含めるようにJSONを必要としますJSONを返す前のもの。作業を簡単にするために、PowerTable(DataTables用のweb2pyプラグイン)、またはウィジェット(web2pyのplugin_wikiに含まれています)を使用することをお勧めします。ウィジェットはwikiページだけでなく、どのWebページでも使用できます。

+0

私はすでに "コントローラ"でdict(data = custdata)を返そうとしていました。次に、 "ビュー"で、そのデータにアクセスしようとしました: - "sAjaxSource": "{{= URL( 'MIS'、 'get_data')}}" response.json(custdata)が使用され、ブラウザで直接アクセスされると、ブラウザページにjsonが書き込まれます。しかし、 "sAjaxSource"からアクセスすると、データはレンダリングされません。私は "get_data"メソッドを呼び出す方法に何か間違っていると思います。あなたpl。間違いを見つけるのを助ける?....ありがとう。 – Vineet

+0

MISはアプリ名かコントローラ名ですか?URL()はそれがコントローラ名であると想定し、/ appname/MIS/get_dataとしてURLを生成します - それは/ MIS/controller/get_dataでなければなりません(その場合は、 URL()へのあなたの呼び出しでコントローラ名を使って 'MIS')を呼び出します。 – Anthony

+0

私はこのような構造を持っています。 a = 'MyWheels'、c = 'MIS'、f = 'get_data'。したがって、{{= URL( 'MIS'、 'get_data')}}は動作するはずです。しかし、データをdataTableに戻すことはありません。 – Vineet

0

あなたが返すために与える "辞書"に "キー"値を持たなければなりません。

iTotalRecords、iTotalDisplayRecords、sEchoおよびaaData。あなたは説明を見つけることができますhttp://datatables.net/usage/server-side

関連する問題