使用 AJAX Javascript 发送纯文本表单数据

我正在尝试通过 AJAX 将表单数据的内容发送到 python-flask 应用程序。这是 Javascript 代码的基本部分


function sendFormInfo(){

  var formInfo = document.getElementById('formInfo');

  var elems = formInfo.elements;


  return new Promise(function(resolve, reject) {

    var getFd = toFormFromElems(elems);


    getFd

    .then(function(fd){


      fd.set('my_key', 'my_value')


      inspectFormData(fd);


      var timestamp = (new Date()).getTime();


      $.ajax({

        url: "/updategame" + '?_=' + timestamp,

        type : "POST",

        processData: false,

        contentType: false,

        dataType: "text",

        data : fd

      })

      .done(function(respPost) {

        resolve(respPost)

      })

      .fail(function(data) {

        console.log("Post request failed.")

        console.log(data);

      });

      })

    })

}


function inspectFormData(inputFormData){

  for(var pair of inputFormData.entries()) {

    console.log(pair[0]+ '-> '+ pair[1]); 

 }

}


function toFormFromElems(elems){

  return new Promise(function(resolve, reject){

    var fd = new FormData();


    for (var i = 0, elem; elem = elems[i++];){

      // console.log(elem.id + " -> " + elem.value);

      fd.set(String(elem.id), String(elem.value));

    }


    // console.log(fd);

    resolve(fd);

  })

}

以及 python 的:


@main.route("/updategame", methods=["POST"])

@login_required

def update_game():

    print(request.files)

    print(request.files.keys())


    return "success"

在我看来,我可以正确填写表单数据:

http://img1.sycdn.imooc.com/64b0fb990001585701940225.jpg

但我在 python 端点得到一个空字典:

http://img3.sycdn.imooc.com/64b0fba90001bb0a03540063.jpg

虽然非常非常(是的,双重非常)类似的方法已被证明可以工作,但是当发送视频时(从画布发送图像,并等待 AJAX POST 响应)

有人有什么建议吗?我已经尝试将缓存断路器添加到请求中。


拉丁的传说
浏览 108回答 1
1回答

DIEA

如果您向 Flask 发送带有表单数据的 POST 请求,它将到达request.form,而不是 request.files ,后者用于文件上传,从而解释了视频上传有效的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript