Jquery 在表单submit上以post方法发送文件,并使用json响应填充数据表
我有一个这样定义的数据表,我不能更改它Jquery 在表单submit上以post方法发送文件,并使用json响应填充数据表,jquery,django,datatables,Jquery,Django,Datatables,我有一个这样定义的数据表,我不能更改它 var table = $('#dt-table').dataTable({ "sPaginationType": "bootstrap", "processing": true, "bServerSide": true, 'bPaginate' : true, "bStateSave": true, "sAjaxSource": 'myurl', some other fields}) 单击一个按
var table = $('#dt-table').dataTable({
"sPaginationType": "bootstrap",
"processing": true,
"bServerSide": true,
'bPaginate' : true,
"bStateSave": true,
"sAjaxSource": 'myurl',
some other fields})
单击一个按钮,我想发出post请求并将文件传递到后端。搜索之后,我发现我可以使用
var-oSettings=table.fnSettings()代码>
因此,我的单击按钮操作类似于:
$('form').on('submit', function(e){
e.preventDefault();
var data = new FormData($(this)[0]);
console.log(data);
var oSettings = table.fnSettings();
oSettings.sAjaxSource="/home/file_upload/;
oSettings.sServerMethod="POST";
//oSettings.aoData.push(data)
table.fnDraw();
所以我不能做的是如何将这个formdata传递到后端。我能够在备份文件中获取post方法,但无法在文件中获取post方法。
基本格言是用通过处理此文件从服务器获得的json数据填充数据表。此外,我使用的是django表单,如下所示:
<form name="form" method="post" id="file-upload-form" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<input type="file" name="file"/>
<button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button>
</form>
<form name="form" method="post" id="file-upload-form" enctype="multipart/form-data" target="_blank" action="your_url">{% csrf_token %}
{{ form.as_p }}
<b>Select a csv file :<input type="file" id="file" name="file" /></b>
<!--<label for="file" class="btn btn-file">Select a csv file</label>-->
<button type="submit" class="btn btn-primary" id='upload-btn'>Load</button>
</form>
{%csrf\u令牌%}
{{form.as_p}}
上传
如果您需要任何额外的信息,请评论。非常感谢您的帮助。好的,我知道这是一个非常长且不具体的问题,但我会尽力回答。这个问题和答案是针对django的
所提到的django表单只需稍加修改,添加一个action字段,这基本上意味着提交表单时要点击哪个url。
因此,新表单如下所示:
<form name="form" method="post" id="file-upload-form" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<input type="file" name="file"/>
<button type="submit" class="btn btn-primary" id='upload-btn'>Upload</button>
</form>
<form name="form" method="post" id="file-upload-form" enctype="multipart/form-data" target="_blank" action="your_url">{% csrf_token %}
{{ form.as_p }}
<b>Select a csv file :<input type="file" id="file" name="file" /></b>
<!--<label for="file" class="btn btn-file">Select a csv file</label>-->
<button type="submit" class="btn btn-primary" id='upload-btn'>Load</button>
</form>
请注意,此{your_url}
不是相对于浏览器中的当前路径,因为它不是以/
开头的。因此,有你的网址根据你的形式。更多关于django URL的信息
现在,您应该在views.py文件中定义一个名为process_file{根据当前url}的函数。Django将负责为您传递文件
def process_file(request, template_name='response.html'):
if(request.method=='POST'):
form = FileUploader(request.POST, request.FILES)
if form.is_valid():
filename=request.FILES['file'].name
if filename.endswith('.csv'):
f = request.FILES['file']
json_data= handle_uploaded_file(f,can_edit)
return render_to_response(template_name, locals(), RequestContext(request))
else :
logging.error("File with other than csv extension")
return HttpResponse("Please choose a csv file only")
else :
logging.error("Not a valid form")
return HttpResponse("Please Choose a file then click the upload button")
else :
logging.error("Method is not post")
return HttpResponse("Something Went wrong , Please try again")
您可以使用上述代码中所示的以下行访问视图文件中的文件:
form=FileUploader(request.POST、request.FILES)
如果form.is_有效():
filename=request.FILES['file'].name
然后根据您的要求处理文件
现在,从后端发送的数据可以在模板内的前端访问。因此,我必须创建另一个html文件,该文件包含一个datatable,而该datatable没有将服务器端处理设置为true。我们使用此行“aaData”:dataset.aaData
将数据提供给datatable。
$(文档).ready(函数(){
如果你读到了这个答案,关键是我们现在在模板中有了数据。我们在模板中添加了一些js代码,将这些数据提供给我们的datatable。这样,我就能够将一个文件传递到后端,处理该文件,然后在前端显示响应