更新:借助karthikr的帮助(谢谢!),我能够让服务器确认ajax POST请求。一如既往,解决一个问题 - 遇到另一个问题。
这里是views.py中的相关代码:
def index(request):
if request.is_ajax():
print('ajax request')
data = json.loads(request.body, parse_float=Decimal)
这是index.html中的AJAX请求:
$("#btn1").click(function() {
$.ajax({
url: "https://api.github.com/",
type: "GET",
dataType: 'json',
success: function(data) {
$.ajax({
url: "{% url 'index' %}",
type: "POST",
data: JSON.stringify(data),
contentType: false,
success: function(data) {
console.log("success");
},
error: function(data) {
alert("There was an error posting the data to the server.");
},
});
},
error: function(data) {
alert("There was an error retrieving the data from the API.");
},
});
});
如果我评论data = json.loads(request.body, parse_float=Decimal)
,则Javascript控制台会说成功。当我取消注释时,我得到了#34;将数据发布到服务器时出错了#34;以及500内部服务器错误。我认为这可能与我尝试访问数据的方式有关。我有几种不同的方式来访问已发布的JSON,但它们似乎都没有用。我做错了什么?
原始问题如下。
现在我有一个可用的Django应用程序,用户可以上传MongoDB转储并按下一个按钮,从该转储中提取信息并使用openpyxl将其放入各种电子表格中。
这就是views.py中的方法看起来像上传的JSON并将其放入电子表格中。
def index(request):
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
uploadedfile = request.FILES['docfile']
data = json.load(uploadedfile)
num_lines = sum(len(v) for v in data.itervalues())
generate_report(data, num_lines)
zip_subdir = 'locationsreport'
zip_filename = '%s.zip' % zip_subdir
s = StringIO.StringIO()
zf = z.ZipFile(s, 'w')
zf.write('Bing.xlsx')
zf.write('Facebook.xlsx')
zf.write('Foursquare.xlsx')
zf.write('Google.xlsx')
zf.close()
response = HttpResponse(s.getvalue(), content_type='application/x-zip-compressed')
response['Content-Disposition'] = 'attachment; filename=%s' % zip_filename
return response
else:
form = DocumentForm()
return render_to_response(
'report/index.html',
{'form': form,},
context_instance=RequestContext(request)
)
generate_report(data, num_lines)
调用单独文件(tasks.py)中的方法,该文件只是遍历JSON并将内容放入电子表格的单元格中。
我试图更新它,以便用户只需按下一个按钮,该按钮就可以向外部API发出AJAX调用(按照我的经理的请求)并解析将数据放入电子表格中的数据。但是,我无法解决这个问题。
这是我的AJAX调用(在index.html中):
$(function() {
$("#btn1").click(function() {
$.ajax({
url: "https://api.github.com/",
type: "GET",
dataType: 'json',
success: function(data) {
$.ajax({
url: "{% url 'index' %}",
type: "POST",
data: data,
dataType: 'json',
contentType: false,
success: function(data) {
console.log("success");
},
error: function(data) {
alert("There was an error posting the data to the server.");
},
});
// alert(JSON.stringify(data));
},
error: function(data) {
alert("There was an error retrieving the data from the API.");
},
});
});
});
我只是使用该GET请求网址进行测试。 GET正常工作 - 最初,成功语句只是注释掉的行(alert(JSON.stringify(data)),它会从URL中吐出数据。但是,当我尝试对索引进行POST时,我得到警告说"将数据发布到服务器时出错。"我如何成功地向服务器发帖,以便我在views.py中的功能可以获取此信息并放入它是一个电子表格?
另外,我是否可能最好放弃这个AJAX请求,转而采用其他方法从API获取信息?
对不起,如果不清楚的话 - 很难准确描述我想要做的事情。如果有人有建议,我会尝试回答有关它的任何问题。