Django 尝试返回Excel电子表格时,JSON中位于位置0的意外标记P
我有一个emberJS应用程序,可以在其中对Django后端进行后AJAX调用。Django中的一个函数根据POST请求中的ID为一组查询项创建一个xlsx文件。它通过Django view函数没有任何问题,但是当HTTP响应返回到ember时,我得到了错误Django 尝试返回Excel电子表格时,JSON中位于位置0的意外标记P,django,excel,ember.js,response,Django,Excel,Ember.js,Response,我有一个emberJS应用程序,可以在其中对Django后端进行后AJAX调用。Django中的一个函数根据POST请求中的ID为一组查询项创建一个xlsx文件。它通过Django view函数没有任何问题,但是当HTTP响应返回到ember时,我得到了错误 SyntaxError: Unexpected token P in JSON at position 0 at parse (<anonymous>) at ajaxConvert (jquery.js:878
SyntaxError: Unexpected token P in JSON at position 0
at parse (<anonymous>)
at ajaxConvert (jquery.js:8787)
at done (jquery.js:9255)
at XMLHttpRequest.<anonymous> (jquery.js:9548)
at XMLHttpRequest.nrWrapper (base-content:20)
EmberJS代码
file_path = '/User/path_to_spreadsheet/content.xlsx'
fsock = open(file_path, "rb")
response = HttpResponse(fsock, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename="content.xlsx"'
return response
export default Controller.extend({
actions: {
storeProductId(products) {
let product_ids = []
products.forEach(function(product){
product_ids.push(product.id)
});
let adapter = this.store.adapterFor('product-export');
adapter.export_products(product_ids).then(function(response){
console.log(response)
}).catch(function(response) {
console.log('ERROR')
console.log(response)
})
}
}
});
export default ApplicationAdapter.extend(FormDataAdapterMixin, {
export_products(products) {
let url = this.buildURL('unified-product');
url = `${url}export/`;
return this.ajax(url, 'POST', { data: {'products': products} });
}
});
产品导出适配器代码
file_path = '/User/path_to_spreadsheet/content.xlsx'
fsock = open(file_path, "rb")
response = HttpResponse(fsock, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response['Content-Disposition'] = 'attachment; filename="content.xlsx"'
return response
export default Controller.extend({
actions: {
storeProductId(products) {
let product_ids = []
products.forEach(function(product){
product_ids.push(product.id)
});
let adapter = this.store.adapterFor('product-export');
adapter.export_products(product_ids).then(function(response){
console.log(response)
}).catch(function(response) {
console.log('ERROR')
console.log(response)
})
}
}
});
export default ApplicationAdapter.extend(FormDataAdapterMixin, {
export_products(products) {
let url = this.buildURL('unified-product');
url = `${url}export/`;
return this.ajax(url, 'POST', { data: {'products': products} });
}
});
默认情况下,Ember Data会对应该如何处理事情做出一些假设(包括您将收到返回的JSON数据)。您使用Ember数据而不是使用对后端的直接Ajax调用有什么原因吗?看起来这将大大简化这里的事情…您能同时显示“产品导出”适配器代码吗?嘿,Igor,我在问题的底部添加了产品导出适配器代码。