我在Beanstalk上有一个flask应用程序,看起来像这样:
application = Flask(__name__)
CORS(application)
@application.route('/price', methods=['GET', 'POST'])
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return_value = some_function_that_takes_about_one_minute()
return str(return_value)
if __name__ == '__main__':
application.debug = True
application.run()
我正在使用google chrome扩展程序中的JS在Beanstalk上将此烧瓶端点称为如下代码:
var xhr = new XMLHttpRequest();
xhr.onload = function () {
alert('This always runs...');
alert(xhr.response);
};
xhr.open('POST', 'http://MYBEANSTALKURL/price', true);
xhr.timeout = 200000;
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ "zip": 90025.0, "city": "los_angeles"}));
这很好,并且chrome扩展成功调用了beantalk上的flask端点,并且根据日志,代码似乎可以运行。
但是将beantalk应用程序的输出返回到我的JS时出现问题。当我的烧瓶应用程序看起来像这样:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return_value = some_function_that_takes_about_one_minute()
return str(return_value)
flask应用程序似乎正在运行,但是什么也没有返回到JS代码,并且当beantalk应用程序返回奇怪的值时,似乎没有调用JS中的onload。如果我将烧瓶代码更改为此,尽管一切正常:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
return "Meow"
然后突然将返回值返回到我的JS中,并调用了onload方法,并且此行:
alert(xhr.response);
在我的浏览器中弹出一个警告,提示“喵”。似乎此问题与beantalk flask应用程序返回的速度有关。当返回烧瓶应用返回非常快的内容(返回“喵”)时,chrome扩展名JS会获取值并显示出来。但是当flask应用程序端点花费的时间更长时,似乎什么也没返回。
似乎是超时问题或什么?或者,当它在烧瓶代码中更早返回时,它工作正常了,这是一条红色的鲱鱼,但它显然是相关的。无论如何,flasktalk上的flask应用程序中的python代码似乎都可以运行,但是似乎flask方法要花一会儿JS只是停止侦听响应...
编辑:同样,如果相关,以下是chrome扩展程序的manifest.json:
{
"name": "A browser action with a popup that changes the page color",
"description": "Change the current page color",
"version": "1.0",
"permissions": [
"activeTab",
"http://MYBEANSTALKURL/"
],
"browser_action": {
"default_title": "Set this page's color.",
"default_icon": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"default_popup": "popup.html"
},
"icons": {
"16": "icon.png",
"32": "icon.png",
"48": "icon.png",
"128": "icon.png"
},
"manifest_version": 2
}
编辑2:似乎当我向烧瓶端点添加time.sleep()时,它会产生一些有趣的结果。如果我这样做:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
time.sleep(0.05)
return "Meow"
然后,如果执行此操作,JS将工作并在警告按钮中显示返回值:
def index():
data = request.get_json()
zip = data['zip']
city = data['city']
time.sleep(1.0)
return "Meow"
突然,它不再起作用。似乎确实有一些问题是由于烧瓶端点运行需要多长时间而引起的,但是我不知道为什么这会引起问题。