【问题标题】:How can I send a XML from HTML in string to Python (using Flask) using Fetch API in Javascript如何使用 Javascript 中的 Fetch API 将字符串中的 HTML 从 HTML 发送到 Python(使用 Flask)
【发布时间】:2021-10-25 22:06:00
【问题描述】:

我正在设计一个从 HTML 页面接收 XML 文件并使用 Flask 将其发送到 Python 的应用程序 这是我的 HTML(前端)代码

<input type="file" id="files"  class="form-control" accept=".xml" required />
<button onclick="send()" style="width: 150px;" class="btn btn-primary">Send</button>

我正在使用带有 Python 的 Flask 来运行我的后端,我正在使用 POSTMAN(我在下面显示它)并在其上发送一个 XML 并返回应该返回的内容 这是我的 Python 代码

@app.route('/Students', methods=['POST'])
def loaddata():
    # this is a list 
    global dataArray

    entry= request.data.decode('utf-8')

    xmlentry= ET.fromstring(entry)

    for student in xmlentry.findall('STUDENT'):
        name= dte.find('NAME').text
        address = dte.find('ADDRESS').text
        new = DataObject(name,adress)

        # DataObject its a class, i am using OOP
        dataArray.append(new)


    return jsonify({'Mensaje':'Students added to the database',})

但我不知道如何从 HTML 文件发送 XML 数据并使其与我的 Python 后端一起使用,我之前使用过 Fetch,但对于这种特殊情况没有 这是我的 JavaScript 代码混乱

var file1 = document.getElementById("file");

function send() {

fetch('localhost:3000/Students', {
            method: 'POST',
            body: file1,
            headers:{
              'Content-Type': 'text/plain',
              'Access-Control-Allow-Origin': '*',}})
        .then(res => res.json())
        .catch(err => {
                console.error('Error:', err)
                alert("Ocurrio un error, ver la consola")
        })
        .then(response =>{
          console.log(response);
          alert(response.Mensaje)
        })
    }

我能做什么? This is my program tested with POSTMAN

【问题讨论】:

  • 欢迎来到 Stack Overflow。 file1 中是否已有 XML?或者您是否中继用户将文件输入到 Input 元素中?
  • 另外,我看到 var file1 = document.getElementById("file") 在你的 HTML 中,我看到 &lt;input type="file" id="files" class="form-control" accept=".xml" required /&gt;,所以这不匹配,file != files
  • 用户将 XML 放入输入元素中
  • 也感谢 HTML 声明

标签: javascript python html xml flask


【解决方案1】:

考虑以下 HTML / JavaScript。

function send(file) {
  var formData = new FormData();
  formData.append('xmlFile', file);
  fetch('localhost:3000/Students', {
      method: 'POST',
      body: formData,
      headers: {
        'Content-Type': 'text/plain',
        'Access-Control-Allow-Origin': '*',
      }
    })
    .then(res => res.json())
    .catch(err => {
      console.error('Error:', err)
      alert("Ocurrio un error, ver la consola")
    })
    .then(response => {
      console.log(response);
      alert(response.Mensaje)
    })
}

var fileInp = document.getElementById("files");
var sendBtn = document.getElementById("filesBtn");
sendBtn.addEventListener('click', (event) => {
  if (fileInp.files[0] !== undefined) {
    send(fileInp.files[0]);
  } else {
    alert("Please select a XML File.");
  }
});
<input type="file" id="files" class="form-control" accept=".xml" required />
<button id="filesBtn" style="width: 150px;" class="btn btn-primary">Send</button>

这基于以下示例:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#uploading_a_file

当用户点击发送时,file 被发送到函数。新的表单数据被创建并 POST 到服务器。

您可能需要调整您的 Python。见这里:Get the data received in a Flask request

【讨论】:

  • 我一直在尝试解决方案,fetch API 看起来工作正常,但我认为我的错误来自 Python,我正在使用 for 循环显示之前的下一行:entry = request.form ['formData'] xmlentry = ET.fromstring(entry) 但是我从 fetch try catch 中得到一个错误,控制台中的这个错误'错误:TypeError:尝试获取资源时的 NetworkError''未捕获(承诺)TypeError:响应是未定义'
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 2021-10-11
  • 1970-01-01
  • 2020-10-08
  • 2016-09-02
  • 2020-08-09
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多