蟒我有以下代碼從一個簡單的3輸入表格檢索值:解碼JSON使用應用服務引擎
//retrieves data from a form
var $form = $(this),
prgname= $form.find('input[name="prg"]').val(),
startDate = $("#startdate").datepicker({ dateFormat: 'yy-mm-dd' }).val(),
endDate = $("#enddate").datepicker({ dateFormat: 'yy-mm-dd' }).val();
下面的代碼將請求發送到服務器:
var request = $.ajax({
url: "/prg/",
type: "post",
data: JSON.stringify({prg: prgname, start:startDate, end:endDate}),
contentType: 'application/json',
dataType: 'json',
success: function() {},
error: function (jqXHR, textStatus, errorThrown){};
在服務器端使用python和webapp2進行以下操作,(這裏是我不確定的事情)
import json
class PrgHandler(webapp2.RequestHandler):
def post(self):
prg= cgi.escape(self.request.POST['prg'])
start_date = cgi.escape(self.request.POST['start'])
end_date = cgi.escape(self.request.POST['end'])
#some code to write to db here
....
#if successful return a success message
if success:
success_msg = [{'class': 'success', 'msg': 'Successfully saved to the database'}]
else:
success_msg = [{'class': 'error', 'msg': 'Could not saved to the database'}]
data_string = json.dumps(success_msg)
self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
self.response.write(data_string)
當我得到響應時,它正在跳過成功功能並直接進入錯誤。
記錄錯誤值即時通訊沒有得到有意義的任何事情:
the error is:
The text status is:error
The jqXHR is:[object Object]
Chrome的控制檯是給我的錯誤:
Resource interpreted as Document but transferred with MIME type application/json:
我指望起來,在這樣的解決方案沒有奏效,我認爲這是與服務器端代碼錯誤:
self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
如果我註釋掉上述行我沒有錯誤鉻,我只是得到一個空白頁上用正確的值按以下格式的響應:
[{"msg": "Successfully saved to the database", "class": "success"}]
在上述情況下,它不會保存到數據庫中,所以我似乎無法到發現任何錯誤,除了標題,只是不知道如何繼續!
EDIT 似乎該錯誤是從我已經刪除以下行服務器側: event.preventDefault();
從我的腳本,它造成了所有的問題,現在至少我得到一個明確的問題在哪裏指出。這是由於錯誤地獲取發佈的數據,我如何以正確的方式做到這一點?我試過如下:
但是我得到一個類型錯誤:預期的字符串或緩衝區上以下行: json_data = self.request.GET.items()
是的,這並沒有很好地記錄在案在webapp2文檔中。你會期望json內容在request.POST變量中。 – ericso