从jQuery请求数据获取一个空的ImmutableMultiDict对象 [英] Getting an empty ImmutableMultiDict object from jQuery request data

查看:473
本文介绍了从jQuery请求数据获取一个空的ImmutableMultiDict对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试上传文件到服务器,但ImmutableMultiDict对象返回空。



upload.html

 < HTML> 
< head>
< title>上传档案Ajax< / title>
< script type =text / javascriptsrc =https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js>< / script>
< script type =text / javascript>
$(function#()#
$('#upload-file-btn')。click(function(){
var form_data = new FormData($('#upload-file' );
form_data.append('file',$('input [type = file]')[0] .files [0]);
console.log(form_data)
$ .ajax({
url:'/ uploadajax',
data:form_data,
type:'POST',
contentType:false,
cache :false,
processData:false,
async:false,
success:function(data){
console.log('Success!');
// console.log(data);
},
});
});
});

< / script>

< / head>
< body>
< form action =name =upload-fileid =upload-filemethod =postenctype =multipart / form-data>
< fieldset>
< label for =file>选择一个文件< / label>
< input name =fileid =filetype =file>
< / fieldset>
< fieldset>
< button id =upload-file-btntype =button>上传< / button>
< / fieldset>
< / form>

< / body>
< / html>

烧瓶

  app = Flask(__ name__)

@ app.route('/')
def index():
return render_template(upload.html)

$ b @ app.route('/ uploadajax',methods = ['POST'])
def upldfile():
logging.debug('request.method :%s',request.method)
logging.debug('request.files:%s',request.files)
logging.debug('request.args:%s',request.args )
logging.debug('request.form:%s',request.form)
logging.debug('request.values:%s',request.values)
logging.debug ('request.headers:%s',request.headers
logging.debug('request.data:%s',request.data)
$ b $ upload_files = request.files.getlist file)

logging.debug('upload_files:%s',upload_files)

file_val = request.files

for k,v在file_val.items()中:logging.debug('key:%s - value:%s',k,v)


#request.m ethod =='POST':file_val = request.files ['file']
return render_template('upload.html')

$ b $ if if __name__ =='__main__':
app.run(host ='127.0.0.1',debug = True,port = 2345,use_reloader = True)

这是日志数据

  016-05-03 00:05:30,500  -  root  -  DEBUG -  request.method:POST 
2016-05-03 00:05:30,500 - root - DEBUG - request.files:ImmutableMultiDict([])
2016-05-03 00:05:30,500 - root - DEBUG - request.args:ImmutableMultiDict([])
2016-05-03 00:05:30,501 - root - DEBUG - request.form:ImmutableMultiDict([])
2016-05-03 00 :05:30,501 - root - DEBUG - request.values:CombinedMultiDict([ImmutableMultiDict([]),ImmutableMultiDict([])]])
2016-05-03 00:05:30,501 - root - DEBUG - request。头文件:Referer:http://127.0.0.1:2345/
原产地:http://127.0.0.1:2345
内容长度:368
用户代理:Mozilla / 5.0。 ...
康涅狄格州保持活跃
X-Requested-With:XMLHttpRequest
主机:127.0.0.1:2345
接受:* / *
接受语言:en-US,en; q = 0.8
Content-Type:false
Accept-Encoding:gzip,deflate2016-05-03 03:13:58,236 - root - DEBUG - request.data:------ WebKitFormBoundaryA8jmfBTRKGJFtMS
Content-Disposition:form-data; NAME = 文件; filename =test_upload.txt
Content-Type:text / plain

qbcdefgh
abcdefgh
------ WebKitFormBoundaryA8jmfBTRKGJFtMS
Content-Disposition :form-data; NAME = 文件; filename =test_upload.txt
Content-Type:text / plain

qbcdefgh
abcdefgh
------ WebKitFormBoundaryA8jmfBTRKGJFtMS--


2016-05-03 00:05:30,501 - root - DEBUG - upload_files:[]


jQuery 版本太旧,导致这个。



当我使用 2.1.1 时,代码运行正常。

顺便说一句,你不需要 form_data .append


Trying to upload a file to server but the ImmutableMultiDict object is returning empty.

upload.html

<html>
 <head>
  <title>Upload File Ajax</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
    $('#upload-file-btn').click(function() {
        var form_data = new FormData($('#upload-file')[0]);
        form_data.append('file', $('input[type=file]')[0].files[0]);
        console.log(form_data)
        $.ajax({
            url: '/uploadajax',
            data: form_data,
            type: 'POST',
            contentType: false,
            cache: false,
            processData: false,
            async: false,
            success: function(data) {
                console.log('Success!');
                // console.log(data);
            },
        });
    });
});

</script>

 </head>
 <body>
<form action="" name="upload-file" id="upload-file" method="post" enctype="multipart/form-data">
    <fieldset>
        <label for="file">Select a file</label>
        <input name="file" id="file" type="file">
    </fieldset>
    <fieldset>
        <button id="upload-file-btn" type="button">Upload</button>
    </fieldset>
</form>

 </body>
</html>

Flask

app = Flask(__name__)

@app.route('/')
def index():
  return render_template("upload.html")


@app.route('/uploadajax', methods = ['POST'])
def upldfile():
  logging.debug('request.method : %s',  request.method)
  logging.debug('request.files : %s', request.files)
  logging.debug('request.args : %s', request.args)
  logging.debug('request.form : %s', request.form)
  logging.debug('request.values : %s', request.values)
  logging.debug('request.headers : %s', request.headers
  logging.debug('request.data : %s', request.data)

  upload_files = request.files.getlist("file")

  logging.debug('upload_files : %s', upload_files)

  file_val = request.files

  for k, v in file_val.items() :logging.debug('key : %s -- value : %s ', k, v)


  # if request.method == 'POST':file_val = request.files['file']
  return render_template('upload.html')


if __name__ == '__main__': 
  app.run(host='127.0.0.1', debug=True, port=2345, use_reloader=True)

This is the log data

    016-05-03 00:05:30,500 - root - DEBUG - request.method : POST
    2016-05-03 00:05:30,500 - root - DEBUG - request.files : ImmutableMultiDict([])
    2016-05-03 00:05:30,500 - root - DEBUG - request.args : ImmutableMultiDict([])
    2016-05-03 00:05:30,501 - root - DEBUG - request.form : ImmutableMultiDict([])
    2016-05-03 00:05:30,501 - root - DEBUG - request.values : CombinedMultiDict([ImmutableMultiDict([]), ImmutableMultiDict([])])
    2016-05-03 00:05:30,501 - root - DEBUG - request.headers : Referer: http://127.0.0.1:2345/
    Origin: http://127.0.0.1:2345
    Content-Length: 368
    User-Agent: Mozilla/5.0....
    Connection: keep-alive
    X-Requested-With: XMLHttpRequest
    Host: 127.0.0.1:2345
    Accept: */*
    Accept-Language: en-US,en;q=0.8
    Content-Type: false
    Accept-Encoding: gzip, deflate2016-05-03 03:13:58,236 - root - DEBUG - request.data : ------WebKitFormBoundaryA8jmfBTRKGJFtMS
Content-Disposition: form-data; name="file"; filename="test_upload.txt"
Content-Type: text/plain

qbcdefgh
abcdefgh
------WebKitFormBoundaryA8jmfBTRKGJFtMS
Content-Disposition: form-data; name="file"; filename="test_upload.txt"
Content-Type: text/plain

qbcdefgh
abcdefgh
------WebKitFormBoundaryA8jmfBTRKGJFtMS--


2016-05-03 00:05:30,501 - root - DEBUG - upload_files : []

解决方案

It's your jQuery version too old to cause this.

When I use 2.1.1, the code runs Okay.

BTW, you do NOT need form_data.append.

这篇关于从jQuery请求数据获取一个空的ImmutableMultiDict对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆