【问题标题】:How does one do async ajax calls using cherrypy?如何使用cherrypy进行异步ajax调用?
【发布时间】:2010-01-06 17:57:47
【问题描述】:

我正在使用cherrypy 的独立服务器 (cherrypy.quickstart()) 和 sqlite3 作为数据库。

我想知道如何在使用cherrypy 的同时对数据库进行ajax/jquery 异步调用?

【问题讨论】:

    标签: jquery python ajax asynchronous cherrypy


    【解决方案1】:

    如果您使用的是 CherryPy 3.2.0-rc1,那么您可以使用装饰器 @json_in@json_out (see here)。

    因此:

    @cherrypy.expose
    @tools.json_in(on = True)
    @tools.json_out(on = True)
    def json_test(self):
        return { 'message':'Hello, world!' }
    

    将JSON返回给浏览器,例如

    $(document).ready(function() {
        $.getJSON('/json_test', function(data) {
            alert(data.message);
        }
    }
    

    您需要记住,CherryPy 期望 JSON 帖子具有 application/json 的内容类型,要使用 jQuery 做到这一点,要么使用 $.ajax 并手动设置 contentType ,或者您可以使用以下便利函数:

    $.postJSON = function(url, data, callback) {
        $.ajaxSetup({ scriptCharset:"utf-8", 
                        contentType:"application/json; charset=utf-8" });
        $.post(url, $.toJSON(data), callback, "json");
    }
    

    此函数使用jquery-json 插件,但您可以使用其他方法转换为 JSON。

    【讨论】:

    • 进口呢? from cherrypi import tools?
    【解决方案2】:

    与使用任何其他网络服务器的方法相同 - 通过让您的 javascript 调用由服务器端应用程序处理的 URL。

    【讨论】:

    • 是的。 CherryPy 不在乎你如何称呼它,只要它是 HTTP。从服务器端看,AJAX 看起来就像任何其他请求一样。您可能必须将 cherrypy.response.headers['Content-Type'] 设置为 'application/json' 或您要返回的任何内容...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 2017-07-05
    • 2020-03-16
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多