2012-05-11 5 views
1

플랫폼 : 구글 앱 엔진 (파이썬) 데이터베이스 : Google 클라우드 SQL를 사용하여 AJAX 사용자 입력을 데이터베이스에서 레코드를 검색 할 수

나는 기본적으로 사이드 바 및 메인 볼 수있는 간단한 웹 페이지를 가지고있다. 사이드 바는 기본적으로 데이터베이스의 레코드 세트로 구성되며, 그 중 하나를 클릭하면 더 자세한 정보를 데이터베이스에서 가져 와서 기본보기에 표시 할 수 있습니다.

핸들에서 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; 
}); 

파이썬 코드 :

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에서 queryid를 올바르게 가져오고 있습니까? 요청서를 올바르게 전송 했습니까? 파이썬은 request.get의 내용을 볼 수 있습니까? –

+0

일부 디버깅 로그를 추가했는데 queryId가 올바르게 수신 된 것으로 보입니다. 쿼리도 작동했습니다 (logging.info를 사용하여 값을 검색 할 수있었습니다). 그러나 이상하게도, 템플릿은 어떤 이유에서든 그것을 집어 올릴 수없고, 다음 메시지를 내게 던졌습니다.'query_info = self_query [0] IndexError :리스트 인덱스가 범위를 벗어났습니다. '이것은 logging.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); 
    } 
    }); 
});