在 Javascript 上发出 POST 请求时出现问题

时间:2021-06-22 23:59:18

标签: javascript flask heroku post axios

所以我正在开发一个使用 Flask 开发并部署在 Heroku 上的网络应用程序。我需要发出 POST 请求并接收来自服务器的响应。我设法让它与 Python 脚本一起工作,但我需要将代码“翻译”Javascript 以便我可以在我的网站上正确使用它。 Flask 上的 Python 应用:

app = Flask(__name__)
CORS(app, support_credentials=True)
@app.route('/')
def index():
    return "Index Page"
@app.route('/predict',methods=['GET','POST'])
def predict():
    data = request.form.get('data')
    if data == None:
        return 'Got None'
    else:
        # model.predict.predict returns a dictionary
        prediction = makePrediction(data)
    return json.dumps(str(prediction))
if __name__ == "__main__":
    app.run(host='0.0.0.0',debug=True) 

发出 Python 请求的工作 POST 代码:

def main():
    PARAMS = {'data':'sample text'}
    response = requests.post(url='https://textgenerator123.herokuapp.com/predict?', data=PARAMS)
    print(response.text)
if __name__ == "__main__":
    main()

我尝试使用 AxiosPOST 发出 Javascript 请求,代码如下:

axios.post('https://textgenerator123.herokuapp.com/predict?', {
  data: 'sample text'})
  
.then((response) => {
  console.log(response);
}, (error) => {
  console.log(error);
});

但控制台返回“Got None”。因此 Web 应用程序收到请求,但出于某种原因将数据设为 Null。我是 Javascript 的新手,如果有人试图帮助我,我将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

网络呢?回应是什么?如果在 200 中,则该帖子应该已经通过了。 “没有得到”可能是来自后响应主体的响应。我认为你应该检查你的开发工具中的网络请求,看看响应是什么。

答案 1 :(得分:0)

如果您使用 data = request.get_json() 而不是 data.form,它应该可以工作,因为这会在您通过 axios 发送传入数据时对其进行解析:{ data: 'sample text'}docs 解释了可用于请求的方法,在这种情况下,表单数据可能不是您想要使用的。

app = Flask(__name__)
CORS(app, support_credentials=True)
@app.route('/')
def index():
    return "Index Page"
@app.route('/predict',methods=['GET','POST'])
def predict():
      data = request.get_json()
    if data == None:
        return 'Got None'
    else:
        # model.predict.predict returns a dictionary
        prediction = makePrediction(data)
        print(prediction)
    return json.dumps(str(prediction))
if __name__ == "__main__":
    app.run(host='0.0.0.0',debug=True)