我有以下代码从一个简单的 3 输入表单中检索值:
//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:
我查了一下,SO上的解决方案不起作用,我认为这是服务器端代码的错误:
self.response.headers.add_header('content-type', 'application/json', charset='utf-8')
如果我注释掉上面的行,我在 chrome 中没有错误,我只是在空白页上返回响应,其中包含以下格式的正确值:
[{"msg": "Successfully saved to the database", "class": "success"}]
在上述情况下,它确实保存到数据库中,所以除了标题之外我似乎找不到任何错误并且根本不知道如何继续!
编辑 似乎来自服务器端的错误我删除了以下行: event.preventDefault();
从我的脚本中,它现在引起了所有问题,至少我清楚地表明了问题出在哪里。这是由于错误地获取发布的数据,我将如何以正确的方式做到这一点?我尝试了以下方法:
json_data = self.request.GET.items()
decoded = json.loads(json_data)
但我得到一个 TypeError: expected string or buffer on the following line: json_data = self.request.GET.items()