Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 在表单submit上以post方法发送文件,并使用json响应填充数据表_Jquery_Django_Datatables - Fatal编程技术网

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。这样,我就能够将一个文件传递到后端,处理该文件,然后在前端显示响应