2010-02-12 2 views
1

не мог понять, почему он не работает:Ajax представления формы в Google App Engine с JQuery

мне нужно отправить запрос на сервер, создать какой-то фрагмент 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() 
+2

Можете ли вы объяснить, что не работает? Не проходит ли ваш обработчик запросов? Верно ли результат верен? –

+0

, когда я нажимаю кнопку отправки, ajax должен отображать картинку для меня с вычисленными результатами, но по какой-то причине обновление всей страницы, но изображение не показывалось. – user271785

ответ

1

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

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

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


1

.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); 
    } 
}); 
2

Для отладки кода питона в приложении 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') 
Смежные вопросы