2013-10-01 58 views
0

只是試圖學習與appengine使用ajax,開始與後期的方法,但它不工作。 這是我對網頁HTML代碼Jquery ajax與谷歌應用程序引擎發佈方法

<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') 

這是python腳本到AJAX請求必須發送到,處理程序是/ 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鴨」,什麼也沒得到,而不是。 任何幫助將不勝感激,因爲我只是開始與AJAX和jQuery的GAE

回答

1

首先,我想你應該抑制表單提交的默認行爲,當你按下提交按鈕通過向.click函數添加「返回false」。但我想這會更好地使用

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

而不是(甚至沒有形式)。

然後,您應該將「dataType:'json'」添加到您的ajax調用中,以告訴jQuery您期望從服務器得到什麼類型的數據。這樣做,您將能夠通過屬性名稱(如「data.name」)獲得響應數據。所以:

response.headers = {'Content-Type': 'application/json; charset=utf-8'} 
self.response.out.write(output) 
+0

我刪除了<形式方法=「郵報」>,它的工作:

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

如果設置適當的內容類型頭您的回覆會更好。是否因爲ajax已經發布到服務器,我不需要另一個帖子? – 404

+0

當然。 AJAX和表單是將數據發送到服務器的兩種不同方式。不同之處在於表單提交總是重新加載頁面,AJAX在後臺發出請求。你只是混合他們。您不僅可以通過點擊按鈕進行Ajax調用,還可以通過瀏覽器中的任何事件進行調用。 – Denisigo