2012-05-11 11 views
1

プラットフォームで、データベースからレコードを取得する:Google App Engineの(パイソン) データベース:GoogleクラウドSQL使用AJAXユーザー入力

私は基本的には、サイドバーとメインビューで簡単なWebページを持っています。サイドバーは、基本的にデータベースからのレコードセットで構成されています。そのうちの1つをクリックすると、より詳細な情報がデータベースから取得され、メインビューに表示されます。

ハンドラでdef get(self)を使用しようとしましたが、変数が読み取られていません。 def get(self)でself.request.get( 'variable')を使用することは可能ですか?そうでなければ、def post(self)からdef get(self)に変数を渡す方法はありますか?

以下は、私が使用しているほとんどのコードです。以下のコードとは別に、結果をテンプレートに渡して、AJAXを使用してもう一度取得します。その部分は期待どおりに動作します。

// HTMLコード

<table class="query-results user"> 
<tbody> 
{% autoescape on %} 
{% for row in user_queries %} 
<tr class="query-results"> 
    <td class="query-user"> 
    <img class="query-user-avatar" src="../img/avatars/{{ row.1 }}_32x32x32.png"><br /> 
    </td> 
    <td class="query-main" data-queryid="{{ row.8 }}"> 
    <span class="query-title">{{ row.2 }}</span><br />{{ row.3 }}</br>{{ row.0 }} || {{ row.5 }} ago 
    </td> 
</tr> 
{% endfor %} 
{% endautoescape %} 
</tbody> 
</table> 

// AJAX - QueryTabハンドラに変数を送信します。

$("td.query-main").live('click', function(){ 
    var queryid = $(this).data("queryid"); 
    var dataString = 'queryId='+ queryid; 
    $.ajax({ 
     type: "GET", 
     url: "/querytab", 
     data: dataString, 
     success: function() { alert("data sent: " + dataString) } 
     }); 
    return false; 
}); 

Pythonのコード:

class QueryTab(webapp2.RequestHandler): 
    def get(self): 
    query_id = self.request.get('queryId') 

    fmt = '%Y-%m-%d %H:%M:%S' 

    conn = rdbms.connect(instance=_INSTANCE_NAME, database='userPrefs') 
    cursor = conn.cursor() 
    cursor.execute('SELECT q.userNickname, a.avatar, q.queryName, q.queryDescription, q.queryValue, q.dateCreated, q.dateLastUpdated, q.activeFlag, q.uniqueId, q.entryID FROM queries AS q LEFT JOIN avatarPrefs AS a ON q.userNickname = a.userNickname WHERE q.activeFlag ="true" AND q.uniqueId = %s ORDER BY q.dateLastUpdated DESC LIMIT 6', (query_id)) 
    self_query = [[str(row[0]), str(row[1]), str(row[2]), str(row[3]), str(row[4]), str(timesince(datetime.strptime(str(row[5]), fmt))), str(timesince(datetime.strptime(str(row[6]), fmt))), str(row[7]), str(row[8]), str(row[9])] for row in cursor.fetchall()] 

    template_file_name = 'templates/querytab.html' 
    template_values = { 
     'self_query': self_query, 
     'query_id': query_id, 
    } 

    path = os.path.join(os.path.dirname(__file__), template_file_name) 
    self.response.out.write(template.render(path, template_values)) 
    conn.close() 
+1

どこが間違っているかを確認するためにデバッグを入れてください。 AjaxはDOMからクエリIDを正しく取得していますか?要求に正しく送信していますか? Pythonはrequest.getの中の何かを見ますか? –

+0

デバッグログをいくつか追加しましたが、queryIdが正しく受信されたようです。クエリも機能しました(logging.infoを使用して値を取得できました)。しかし、不思議なことに、テンプレートはなんらかの理由でそれらを取り上げることができず、私に次のメッセージを返すことができます: 'query_info = self_query [0] IndexError:リストインデックスが範囲外です.'login.infoこれを理解することに何の問題もなかった... – koend

答えて

2

当時、私はまだAJAXで熟達していなかったので、コールバック機能をあまり理解していませんでした。私が使用し終わったのは、次の行に沿ったものでした:

$('td.query-main').live('click', function() { 
    var queryid = $(this).data("queryid"); 
    var dataString = 'term=' + queryid; 
    $.ajax({ 
    type: "POST", 
    url: "/snippets", 
    data: dataString, 
    success: function(data) { 
     $('#query-focus').html(data); 
    } 
    }); 
}); 
関連する問題