快速摘要:我正在创建一个Chrome扩展程序,它与App Engine上的Python 2.5运行时应用程序进行通信,该应用程序在Google Cloud SQL中查询SQL数据库。 App Engine的教程主要是入门的多样性,我找不到任何关于如何正确处理应用程序的AJAX帖子的教程。
Chrome扩展程序正在进行AJAX调用,但App Engine上没有任何内容。
直接从它的URL运行Python应用程序(我有测试代码,允许我直接向搜索类提交变量),它能够返回正确的结果,因此查询和数据库连接可以正常工作。
我遇到的问题是我:
(a)不确定我的AJAX请求是否甚至击中了Python应用程序
(b)不确定我是否正确处理了AJAX请求(即从中读取数据并使用输出进行响应)
我已经在线阅读了文档和示例,但我找不到一个真正概述如何让AJAX查询与AppEngine上的托管Python应用程序进行交互的内容。如果有人发现任何明显的错误或者可以指出我的相关文档,我将非常感激!
Chrome扩展程序HTML
<head>
<script src='jquery-1.5.1.js'></script>
<script type="text/javascript">
function storeInput(value) {
$.ajax({
url: '<url>'
type: 'POST',
data: {'term': value},
dataType: 'text',
success: function (data) {
console.log('boom: ', data);
//var response = '<p class="desc_line"><span class="desc_title">Name: </span><span class="desc_text">' + eval(data) + '</p>';
},
error: function(data) {
console.log('no chance');
}
});
}
$(function() {
//when the page loads
$('.input-form').live('submit', function(e) {
e.preventDefault();
var formInput = $(this).find('.term-input').val();
storeInput(formInput);
});
});
</script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
App Engine Python代码
from __future__ import with_statement
import cgi
import urllib
from google.appengine.api import rdbms
from google.appengine.api import files
from google.appengine.ext import db
from google.appengine.ext import webapp
from django.utils import simplejson
from google.appengine.ext.webapp.util import run_wsgi_app
_INSTANCE_NAME = '<instance>'
def Parse
# redacted since this works fine to work through strings passed to it and turn them into proper SQL queries.
class Search(webapp.RequestHandler):
def post(self):
#Create connection to database
conn = rdbms.connect(instance=_INSTANCE_NAME, database='salesinfo')
cursor = conn.cursor()
# ideally set the body of the AJAX call to a variable but thats not working
user_input = self.request.body
# Parse input
sql_query = []
for value in Parse(user_input):
sql_query.append(value)
# Try first query
cursor.execute(sql_query[0])
# If first query yields no results, try the second query
if cursor.rowcount < 1:
cursor.execute(sql_query[1])
for row in cursor.fetchall():
output = row[0]
self.response.out.write(output) # ideally respond with the result
conn.close()
application = webapp.WSGIApplication(
[('/', Search)], #removed request
debug=True)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
答案 0 :(得分:0)
这里有太多可能的问题。我想你一下子想做太多事情。乍一看,你的代码是有道理的。
我首先在本地运行后端应用程序并检查AJAX代码是否正确,然后再将其绑定到Chrome扩展程序中。我不确定在那里调试是否容易(我怀疑它是,但我从未尝试过)。在任何情况下,通过针对本地开发服务器运行JavaScript代码,如果您正在访问服务器,您将会更好地了解它。也可以更容易地看到发生了什么。
您也可以尝试使用XmlHTTPRequest进行AJAX调用。这将从等式中删除jQuery。
此外,日志记录模块是您的朋友 - 您可以 - 并且应该 - 在调试期间记录调试事件。