使用AJAX从Bottlepy服务器获取数据

时间:2014-06-23 11:50:20

标签: javascript jquery python ajax bottle

我试图从一个瓶装服务器中检索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的位置如何。

另外,如果无法做到这一点,我怎么能在模板的帮助下做到这一点?

1 个答案:

答案 0 :(得分:0)

你的问题源于对瓶子应用程序的一些混淆。

每当您使用@route (more on this)时,

Bottle都会为您创建默认应用,并在后续调用中隐式重用此默认应用。此默认应用行为存在于许多功能中(包括hookrun)。

重点是:

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)