使用jQuery在Google App Engine中提交Ajax表单

时间:2010-02-12 11:44:12

标签: jquery python ajax google-app-engine

无法弄清楚它为什么不起作用:

我需要向服务器发送请求,使用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()

3 个答案:

答案 0 :(得分:2)

要调试GAE应用中的python代码,请在正在运行的应用上使用应用引擎启动器日志:

Using Google App Engine logs

这应该有助于澄清应用失败的位置。我还建议对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);
   }
 });