2012-11-14 79 views
2

我有一個簡單的ajax發佈請求。該請求已發送。但爲什麼當我打印request.POST在views.py,它說:request.POST: <QueryDict: {}>簡單的ajax請求發佈空

if (start <= end) { 
    // fire a request to /tryit 
     var args = { 
     type: "POST", 
     url: "/tryit/", 
     data: {'x':x1, 'y': y1}, 
     error: function() { 
      console.log("Error occurs"); 
     }, 
     success: function() { 
      console.log("save_modification works"); 
     }, 
     complete:done 
    }; 
    $.ajax(args); 
    alert("ajax request is sent"); 
} 

在views.py,

def tryit(request): 
    print "request: ", request 

下面是當我打印請求信息的輸出。輸出包括如下。

[Wed Nov 14 14:50:44 2012] [error] post request: <WSGIRequest 
[Wed Nov 14 14:50:44 2012] [error] path:/tryit/, 
[Wed Nov 14 14:50:44 2012] [error] GET:<QueryDict: {}>, 
[Wed Nov 14 14:50:44 2012] [error] POST:<QueryDict: {}>, 
[Wed Nov 14 14:50:44 2012] [error] COOKIES:{'sessionid': 'f997a4c4ba0f576fe11141e0c0dcd38 
d'}, 
[Wed Nov 14 14:50:44 2012] [error] META:{'CONTENT_LENGTH': '128', 
[Wed Nov 14 14:50:44 2012] [error] 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 
[Wed Nov 14 14:50:44 2012] [error] 'DOCUMENT_ROOT': '/var/www', 
[Wed Nov 14 14:50:44 2012] [error] 'GATEWAY_INTERFACE': 'CGI/1.1', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_ACCEPT': '*/*', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_ACCEPT_LANGUAGE': 'en-ca', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_CONNECTION': 'Keep-Alive', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_COOKIE': 'sessionid=f997a4c4ba0f576fe11141e0c0d 
cd38d', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_PRAGMA': 'no-cache', 

[Wed Nov 14 14:50:44 2012] [error] 'HTTP_USER_AGENT': 'Mozilla/5.0 (compatible; MSIE 9.0 
; Windows NT 6.0; Trident/5.0)', 
[Wed Nov 14 14:50:44 2012] [error] 'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest', 
[Wed Nov 14 14:50:44 2012] [error] 'PATH_INFO': u'/tryit/', 
[Wed Nov 14 14:50:44 2012] [error] 'PATH_TRANSLATED': 'django.wsgi/tryit/', 
[Wed Nov 14 14:50:44 2012] [error] 'QUERY_STRING': '', 

[Wed Nov 14 14:50:44 2012] [error] 'REQUEST_METHOD': 'POST', 
[Wed Nov 14 14:50:44 2012] [error] 'REQUEST_URI': '/tryit/', 
[Wed Nov 14 14:50:44 2012] [error] 'SCRIPT_FILENAME': 'django.wsgi', 
[Wed Nov 14 14:50:44 2012] [error] 'SCRIPT_NAME': u'', 

[Wed Nov 14 14:50:44 2012] [error] 'SERVER_ADMIN': '[email protected]', 

[Wed Nov 14 14:50:44 2012] [error] 'SERVER_PORT': '80', 
[Wed Nov 14 14:50:44 2012] [error] 'SERVER_PROTOCOL': 'HTTP/1.1', 
[Wed Nov 14 14:50:44 2012] [error] 'SERVER_SIGNATURE': '<address>Apache/2.2.22 (Ubuntu) 
[Wed Nov 14 14:50:44 2012] [error] 'SERVER_SOFTWARE': 'Apache/2.2.22 (Ubuntu)', 

[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.callable_object': 'application', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.enable_sendfile': '0', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.handler_script': '', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.input_chunked': '0', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.listener_host': '', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.listener_port': '80', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.process_group': '', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.queue_start': '1352926244930263', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.request_handler': 'wsgi-script', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.script_reloading': '1', 
[Wed Nov 14 14:50:44 2012] [error] 'mod_wsgi.version': (3, 4), 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.errors': <mod_wsgi.Log object at 0xa8224c78>, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.file_wrapper': <built-in method file_wrapper of 
mod_wsgi.Adapter object at 0xa8210218>, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.input': <mod_wsgi.Input object at 0xa8205ef8>, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.multiprocess': True, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.multithread': True, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.run_once': False, 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.url_scheme': 'http', 
[Wed Nov 14 14:50:44 2012] [error] 'wsgi.version': (1, 0)}> 


But when I use fiddler, I can see the query parameter string. I am stuck here for a day. Please help. Thanks. 

新的更新: 我使用Chrome和網絡選項卡,它說有一個內部服務器錯誤和引發劑是jquery.min.js:16。我不會詳細說明這些信息。這是否包含一些信息?

如果我從POST更改爲GET,查詢參數可以由服務器接收。但是,如果我使用POST,查詢參數不能發佈。怎麼解釋它?

+0

你嘗試在Firebug尋找這種或類似的,看看什麼是真正被張貼?你確定'mydata'實際上包含數據嗎? – ernie

+0

在Chrome開發人員工具中,轉至控制檯選項卡並觸發您嘗試測試的事件。出現錯誤嗎?如果是的話發佈錯誤。 –

+0

您的代碼對於我們來說太不完整,無法提出合適的建議。給我們所有需要測試的代碼,我們可以給你更好的建議。 –

回答

1

您需要使用控制檯並檢查ajax調用的內容和標頭。

你在螢火蟲中做了這個(我希望你的firefox已經安裝了螢火蟲), 或在Chrome上點擊右鍵&檢查元素。

在打開的窗口中應該有NET面板(螢火蟲), 或Chrome中的網絡。

在那裏你會看到對服務器的每個調用的詳細信息,它是響應。

+0

如何檢查ajax調用的內容和標題? – susanne

+0

編輯我的回答 –

0

data應該是一個字典。你的js應該是這樣的:

if (start <= end) { 
    // fire a request to /tryit 
    var args = { 
     ... 
     data: {"mydata" : mydata }, 
     ... 
} 
+0

它不起作用 – susanne

+0

嗯.. [文檔](http://api.jquery.com/jQuery.ajax/)說,傳輸的數據被轉換爲字符串,所以它應該是JSON對象。將'mydata'改爲'{'x':x1,'y':y1,'z':z1}'。這應該工作。 – Melevir

0

當在firebug中調試javascript時,我得到錯誤「x1 is not defined」。

你打算x1和y1是字符串嗎?如果是的話試試這個...

data: {'x':'x1', 'y': 'y1'}, 

希望這有助於

安德魯

+0

它是一個字符串的變量。 – susanne