【问题标题】:Sending data with XMLHttpRequest使用 XMLHttpRequest 发送数据
【发布时间】:2018-09-30 17:17:11
【问题描述】:

我有一个网站,当按下按钮时,它应该向 python 脚本(在第三方网站上)发送一个名称。然后,此 python 脚本会将名称变为大写并将其返回给网站。

现在,当按下按钮时,正在正确发送 XMLHttpRequest,但我不确定如何使用 XMLHttpRequest 正确发送数据,以及如何在 python 脚本中访问这些数据。

XMLHttpRequest:

document.getElementById("myButton").addEventListener("click", 
    function() {
        var myRequest = new XMLHttpRequest();

        myRequest.open('GET', 'https://example.com/');

        myRequest.onreadystatechange = function () { 
            if (myRequest.readyState === 4) {
                alert(myRequest.responseText);
            }
        }
        myRequest.send("Bob"});
    }
);

Python 脚本:

from flask import Flask, jsonify
from flask_cors import CORS
from requests import request

app = Flask(__name__)
CORS(app)

@app.route("/", methods=["GET"])
def hello_world():
    return jsonify(name = (name_sent_by_XMLHttpRequest).upper()) # Should return "BOB"

if __name__ == '__main__':
    app.run()

【问题讨论】:

  • 我猜这是来自学校/大学的某种测试/任务,因为调用 api 来使某些东西大写是没有意义的
  • 它不适用于学校/大学。我实际上并没有用它来制作大写字母,但它是一个很好的例子,没有过多的细节。

标签: javascript python ajax xmlhttprequest


【解决方案1】:

我对 javascripts 的 XMLHTTPRequest 一无所知,但在某些时候,您需要将 name 发送到 python 服务器,对吗?如何做到这一点取决于您,但基于 GET 的选项:

带参数的GET请求:https://example.com/?name=your_name_goes_here

在您的烧瓶应用程序中,侦听路由 "/" 的函数现在可以访问该 arg,类似于

name = request.args.get('name', '')

然后你可以将它大写(),并以某种格式返回它 - 可能是 XML ?

return Response(my_xml, mimetype='text/xml')

根据您的评论进行更新:通常在烧瓶函数中,您将使用烧瓶 request 对象来获取您的 URL 参数。在您的示例中,您将requests 模块导入为request,而不是使用它,而是破坏flask.request 命名空间。将您的导入更改为这样的内容,它应该可以正常工作:

from flask import Flask, jsonify, request
from flask_cors import CORS
import requests

【讨论】:

  • 这会导致request 出现问题,正如它所说的AttributeError: 'function' object has no attribute 'args'
  • @Lana - 看起来你已经用 requests 模块编写了烧瓶请求名称空间,通过导入它 as request。我通过变通方法更新了我的答案。
猜你喜欢
  • 2016-12-05
  • 2022-01-03
  • 2014-05-21
  • 1970-01-01
  • 2020-02-01
相关资源
最近更新 更多