2010-09-11 46 views
5

我正在使用Google App Engine,Jquery和Django。我想POST數據被髮送到時提交表單時,服務器端,我這樣做是JQuery的用下面的代碼:當使用JQuery,Django和Google App Engine時,jQuery AJAX請求被調用兩次

$("#listform").submit(function() { 
      $.ajax({ 
        type: "POST", 
        url: "/xhrtest", 
        data: {'name': 'herman'}, 
        success: function(data){ 
          console.log(data) 
        } 
      }); 
    }) 

在我的Django的看法:

def xhrtest(request): 
     if request.method == "POST": 
       return HttpResponse("Post data!") 
     else: 
       return HttpResponse("GET request.") 

我會預計會收到「發佈數據!」的回覆,但不知何故回覆總是「GET請求」。這也不是unicode問題,因爲可以打印request.method並查看「GET」。

在Firebug中對此進行評估時,我發現有兩個請求經歷:首先是一個POST請求,它接收到「GET請求」的回覆。然後是一個GET請求,它接收到「獲取請求」的回覆。以及。在Google App Engine開發控制檯中,我還可以看到兩個請求。 POST請求滿足301響應,並且GET獲得200.

這是什麼意思,我需要做什麼才能夠接收POST數據?

+0

request.method(在你的django代碼中)是否正確?如果它是「發佈」,它不會等於「POST」。 – kevingessner 2010-09-11 18:19:01

+0

某些服務器配置正在重定向您的POST請求,看起來像。 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) – mkoistinen 2010-09-11 18:23:11

回答

11

問題幾乎可以肯定的是,你要求的網址/xhrtest,沒有最後的斜線。默認情況下,Django會將該請求重定向到/xhrtest/ - 最後一個斜槓 - 重定向將是GET,而不是POST。

有關詳細信息,請參閱配置此行爲的APPEND_SLASH設置和使用它的CommonMiddleware模塊。

+0

謝謝,解決了它。我不知道django有這種默認行爲。 – 2010-09-11 19:06:21