0

刚想学用appengine的ajax,从post方法开始,但是没用。这是我的页面 HTML 代码

    <html>
    <head>
    <title> Hello </title>
<script  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
var data={"name":"Hola"};
$(document).ready(function(){
$('#subbut').click(function(){
$.ajax({

 url: '/test',
 type: 'POST',
 data: data,
 success: function(data,status){

    alert("Data" + data +"status"+status);
  }
 });
 });
 });
 </script>
 </head>
 <body>
 <form method="post" action="/test">
 <input type="submit" id="subbut">
 </form>
 <div id="success"> </div>
 </body>
 </html>

这是我的python代码来渲染上面的html代码,它的处理程序是/test1

from main import *

class TestH1(Handler):
      def get(self):
              self.render('tester.html')

这是AJAX请求必须发送到的python脚本,处理程序是/test。

    from main import * 
    import json
    class TestH(Handler):
        def post(self):
             t=self.request.get('name')
             output={'name':t+" duck"}
             output=json.dumps(output)
             self.response.out.write(output)

预期的行为是,当我单击提交按钮时,我收到一条警告消息,上面写着“Hola duck”,但什么也没有。任何帮助将不胜感激,因为我刚开始使用 AJAX 和 Jquery with GAE

4

1 回答 1

1

首先,我想您应该通过在 .click 函数中添加“return false”来抑制按下提交按钮时表单提交的默认行为。但我想最好只使用

<input type="button" id="subbut"> 

相反(即使没有形式)。

然后你应该在你的ajax调用中添加“dataType:'json'”来告诉jQuery你期望从服务器得到什么类型的数据。这样做您将能够通过“data.name”等属性名称获取响应数据。所以:

var data={"name":"Hola"};
$(document).ready(function(){
    $('#subbut').click(function(){
        $.ajax({
            url: '/test',
            type: 'POST',
            data: data,
            dataType: 'json',
            success: function(data,status){
                alert(data.name);
                alert("Data" + data +"status"+status);
            }
       });
       return false;
    });
});

如果您为响应设置适当的内容类型标头会更好:

response.headers = {'Content-Type': 'application/json; charset=utf-8'}
self.response.out.write(output)
于 2013-10-02T07:12:40.043 回答