使用XMLHttpRequest粘贴剪贴板

时间:2018-02-02 15:46:01

标签: python-3.x http flask xmlhttprequest jinja2

我目前正在使用Flask创建网站,并遇到了一个有趣的问题。有一些代码为用户提供了输入大约20个单独输入字段的值的选项。我想要做的是构建一个按钮,允许用户粘贴Excel表格中的列。本质上,一个按钮将查看剪贴板,获取字段,将字符串转换为数组,并按照它们在列表中出现的顺序将值放入每个input

到目前为止,我已经能够使用tk.Tk().clipboard_get()将剪贴板转换为字符串,并相信我可以通过制作XMLHttpRequest来获取此值,但实际上却没有运气工作。

我想要完成的一些代码:

的Python:

@app.route('/some/path/here', methods = ['GET'])
def paste():
  try:
      values = tk.Tk().clipboard_get()
      values = values.replace('\n',',')
      return values
  except:
      return None

HTTP:

<button type="button" style="float: right" onclick="Testing()">Paste</button>
<p id="textHere"></p>

JavaScript的:

<script>

    function Testing() {
        var wvpst = new XMLHttpRequest();
        wvpst.onreadystatechange = function(){
            if (this.readyState == 4 && this.status == 200) {
                var list = this.responseXML;
                // list = list.replace(/&#39;/g,"").replace(/ &#39;/g,"");
                // list = list.split(", ");
                document.getElementById("textHere").innerHTML = list;
            }
        }
        wvpst.open("GET","{{ url_for('paste') }}",true);
        wvpst.send();
    }

</script>

目前,我只是想从Excel工作表中获取复制的值列表,但按下按钮时没有返回任何内容。我是否只是错误地使用XMLHttpRequest或者我还需要做些什么才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

中设置调试断点
if (this.readyState == 4 && this.status == 200) {

}

并检查您的回复。在Flask中的函数的第一行设置另一行。这些应该可以让您了解故障的位置。

其他一些,也许更重要的说明:

要点1)在你的烧瓶试试/除外,失败时你应该提供一个响应,只有500响应。将返回None替换为:

return app.make_response('Couldn't parse clipboard information!'), 500

第2点)无需将此信息传递给服务器进行处理。您可以在前端的javascript中完成此操作,并为您的服务器保存一些处理,并让您的客户端等待HTTP响应。

让用户将其内容粘贴到文本框或其他元素中,然后从那里访问该值。

直接剪贴板访问不是大多数浏览器自由放弃的,因此最好避免使用该路径。

要点:

你的xmlhttprequest看起来很好。我猜你的烧瓶尝试失败了,如果有的话,还有一些无用的东西。

在javascript中执行此操作。

相关问题