无法弄清楚它为什么不起作用:
我需要向服务器发送请求,使用meanCal方法在python中生成一些html片段,然后将该片段嵌入到使用计算方法提交html文件中并动态显示在dyContent div中。所有过程都是通过单击表单中的提交按钮完成的。
任何建议???提前谢谢。
提交html:
<div id="dyContent" style="height: 200px;">
waiting for user...
{{ mgs }}
</div>
<div id="leturetext">
<form id="mean" method="post" action="/calculation">
<select name="meanselect">
<option value=10>example</option>
<option value=11>exercise</option>
</select>
<input type="button" name="btnMean" value="Check Results" />
</form>
</div>
<script type="text/javascript">
$(document).ready(function() {
//$("#btnMean").live("click", function() {
$("#mean").submit(function(){
$.ajax({
type: "POST",
cache: false,
url: "/meanCal",
success: function(html) {
$("#dyContent").html(html);
}
});
return false;
});
});
</script>
蟒:
class MainHandler(webapp.RequestHandler):
def get(self):
path = self.request.path
if doRender(self, path):
return
doRender(self,'index.htm')
class calculationHandler(webapp.RequestHandler):
def post(self):
doRender(self, 'Diagnostic_stats.htm',
{'mgs' : "refreshed.", })
def get(self):
doRender(self, 'Diagnostic_stats.htm')
class meanHandler(webapp.RequestHandler):
def get(self):
global GL
index = self.request.get('meanselect'.value)
if (index == 10):
allData = GL.exampleData
dataString = ','.join(map(str, allData))
dataMean = (str)(stats.lmean(allData))
doRender(self, 'Result.htm',
{
'dataIn' : dataString,
'MEAN' : "Example Mean is: " + dataMean,
})
return
else:
allData = GL.exerciseData
dataString = ','.join(map(str, allData))
dataMean = (str)(stats.lmean(allData))
doRender(self, 'Result.htm',
{
'dataIn' : dataString,
'MEAN' : "Exercise Mean is: " + dataMean,
})
def main():
global GL
GL = GlobalVariables()
application = webapp.WSGIApplication(
[('/calculation', calculationHandler),
('/meanCal', meanHandler),
('.*', MainHandler),
],
debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
答案 0 :(得分:2)
要调试GAE应用中的python代码,请在正在运行的应用上使用应用引擎启动器日志:
这应该有助于澄清应用失败的位置。我还建议对logging.info(或logging.debug)进行一些调用。
例如为:
import logging
class MainHandler(webapp.RequestHandler):
def get(self):
logging.info("Mainhandler has been called.")
path = self.request.path
logging.info("Mainhandler called for:" + path)
if doRender(self, path):
return
doRender(self,'index.htm')
答案 1 :(得分:1)
要通过AJAX提交表单,最好考虑使用Form Plugins。您无需构建自己发送的参数。
此外,如果您确保表单在没有启用JavaScript的情况下正常工作,那就更好了。这样,即使浏览器中的js关闭,您的页面仍然可以正常运行。对于启用了js的访问者,使用AJAX添加额外的体验。
要进行调试,请在Firefox中使用Firebug,或在Safari和Google Chrome中使用内置的WebInspector。检查AJAX请求是否正在根据需要传递数据,并检查响应,是否包含所需的响应,错误消息等。
答案 2 :(得分:1)
.submit()
方法实际上提交了表单,就像按下了提交按钮一样。使用jQuery,您可以仅根据特定条件提交表单,或者作为对事件的响应。
如果要将表单数据发送到服务器并获得响应,则需要创建数据sting,然后将其设置为$.ajax()
调用中的参数。
所以你的Javascript看起来像这样:
var optionSelected = $('#mean select option:selected').val();
var dataString = 'meanselect=' + optionselected;
$.ajax({
type: "POST",
data: dataString,
cache: false,
url: "/meanCal",
success: function(html) {
$("#dyContent").html(html);
}
});