我试图从一个瓶装服务器中检索json数据到网页上。我试图首先实现一个基本版本,所以尝试只使用字符串。但似乎没有发生任何事情。这是代码 -
HTML(包括js) -
<!DOCTYPE>
<html>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<body>
<script>
function print()
{
$(document).ready(function(){
$.get('http://localhost:8080/check', function(result){
alert('success');
$('#main').html(result);
});
});
}
print();
</script></body>
</html>
python代码 -
from bottle import Bottle, route, get,request, response, run, template
app = Bottle()
@app.hook('after_request')
def enable_cors():
response.headers['Access-Control-Allow-Origin'] = '*'
# a simple json test main page
str = "Hello"
@route('/') #irrelevant to this question. Used this to check server...
def test():
return template('file', str)
@app.get('/check')
def showAll():
return str
run(host='localhost', port=8080)
如何访问服务器上的数据? 注意:HTML是一个单独的文件,我希望代码能够工作,而不管HTML的位置如何。
另外,如果无法做到这一点,我怎么能在模板的帮助下做到这一点?
答案 0 :(得分:0)
你的问题源于对瓶子应用程序的一些混淆。
每当您使用@route
(more on this)时, Bottle都会为您创建默认应用,并在后续调用中隐式重用此默认应用。此默认应用行为存在于许多功能中(包括hook
和run
)。
重点是:
app = Bottle() # creates an explicit app
@route('/') # adds the route to the default app
@app.hook('after-request') # adds the hook to the explicit app
run(...) # runs the default app, the hook is not used
要解决您的问题,您有两种选择:
我发现明确使用该应用程序可以更轻松地创建子应用程序,并且更加清晰地了解发生了什么。
新代码:
import bottle
from bottle import response, template, run
app = bottle.Bottle()
@app.hook('after_request')
def enable_cors():
response.headers['Access-Control-Allow-Origin'] = '*'
# a simple json test main page
str = "Hello"
@app.route('/') #irrelevant to this question. Used this to check server...
def test():
return template('file', str)
@app.get('/check')
def showAll():
return str
run(app=app, host='localhost', port=8080)