Отправка формы Ajax в Google App Engine с помощью jQuery - PullRequest
1 голос
/ 12 февраля 2010

не мог понять, почему он не работает:

Мне нужно отправить запрос на сервер, сгенерировать какой-нибудь фрагмент html в python с помощью метода meanCal, а затем сделать так, чтобы этот фрагмент был встроен в отправляемый html-файл с использованием метода вычисления и динамически отображался в div dyContent. все процессы выполняются одним нажатием на кнопку отправки в форме.

какие-либо предложения ??? заранее спасибо.

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 ]

2 голосов
/ 12 декабря 2012

Для отладки кода Python в вашем приложении GAE используйте журнал запуска движка приложения на работающем приложении:

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 голос
/ 12 апреля 2010

Метод .submit() фактически отправляет форму, как если бы вы нажали кнопку отправки. Используя jQuery, вы можете отправить форму только в зависимости от определенных условий или как ответ на событие.

Если вы хотите отправить данные формы на сервер и получить ответ обратно, вам необходимо создать строку данных, которая затем задается в качестве параметра в вызове $.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);
   }
 });
1 голос
/ 13 февраля 2010

Чтобы отправить форму через AJAX, лучше использовать Плагины форм . Вам не нужно будет создавать параметр для отправки самостоятельно.

Кроме того, лучше убедиться, что форма работает без включенного JavaScript. Таким образом, ваша страница будет работать, даже если js в браузере выключен. Для посетителей с включенным js добавьте дополнительный опыт, используя AJAX.

Для отладки используйте Firebug в Firefox или WebInspector, встроенный в Safari и Google Chrome. Проверьте, передает ли AJAX-запрос данные так, как вам нужно, и проверьте, содержит ли он нужный вам ответ, сообщение об ошибке или другое.


...