【问题标题】:Sending JSON from python script to JQuery将 JSON 从 python 脚本发送到 JQuery
【发布时间】:2018-02-08 05:36:41
【问题描述】:

我是 Jquery 的新手,我下面的脚本不会在 HTML 页面上产生任何输出。

问题

在我的脚本中,我使用requests 库向返回 JSON 对象的 Flask URL 发送 GET 请求。然后需要将此对象发送到 JQuery,然后 JQuery 将在网页上输出 JSON 对象。如果我使用response.text 发送数据,它工作正常,但如果我使用response.json() 发送它,它什么也不输出。但是,我需要将它作为 JSON 对象发送,以便我可以从中提取所有数据并将其放在 HTML 元素上。

getajaxtest.py

import requests
import json
def send_log_ajax():
     url = 'http://xx.com/returnjsonobj'
     response = requests.get(url)
     return response.json()
if __name__ == '__main__':
     ajax_var = send_log_ajax()
     print(ajax_var)

HTML 和 JQuery

 <html>
    <head><script
  src="https://code.jquery.com/jquery-3.2.1.min.js"></script></head>
    <body>
    <div style="border:1px solid black;background-color:lightgray">
        <p id="transactioninfo">Loading Transaction Information...</p>
    </div>
    <script>
    function getlogs() {

    var url = 'www.myserver.com/getajaxtest.py';

        $.ajax({
           type: 'GET',
           url: url,
           dataType: 'json',
           success: function(data) {

           $("#transactioninfo").html(data)
        },

        error: function(e) {
            console.log(e.message);
        }
    });

    }
    $(document).ready(function(){

        setTimeout(function(){getlogs();}, 2000);
        setInterval(function(){getlogs();}, 2000);

    });

    </script>

    </body>
    </head>
    </html>

【问题讨论】:

    标签: jquery python html json ajax


    【解决方案1】:

    您正在打印 Python 数据结构,而不是 JSON。 requests.json() 将 Flask 响应解码为 Python 字典、列表、字符串、数字、布尔值,也许还有 None。那不是 JSON 数据。

    只需将您的数据保存为 JSON 数据,然后打印您收到的文本。您的脚本只是一个代理,无需解释 JSON 数据。

    如果您必须解码(也许您想对包含的数据应用一些转换),请确保您再次编码回 JSON。使用json.dumps() 生成新的 JSON 编码字符串。

    【讨论】:

    • 我应该只使用response.text,然后在JQuery 中使用dataType: 'json'?不,不需要任何转换,我只需要从 Jquery 中的键中提取值
    • @omrakhur:然后只需打印 response.text 以获取 Unicode 文本,或将 response.content 直接写入 sys.stdout.buffer 以避免从字节解码并再次编码。
    • 我对@9​​87654330@ 和response.text 有点困惑。如果我使用前者,当事物返回到 JQuery 时,它仍然被视为 JSON 吗?
    • @omrakhur: response.content 是来自服务器的原始响应,以字节为单位。 JSON 是基于文本的格式,因此您可以将字节解码为文本。这就是 response.text 的值,通过文本编码(通常是 JSON 的 UTF-8)解释的字节。
    • @omrakhur:用print() 写出文本必须再次对该文本进行编码,因为文件(包括终端或网络连接)只占用字节。因此,您的 JSON 文本再次编码为字节,并且编码 可能 不同。因此,对于相同的 JSON 数据,您最终可能会得到不同的结果。您没有指定如何运行 Python 脚本(可能是 CGI 脚本吗?),因此不清楚将使用什么编码。它可能只是 ASCII,而且我知道 Flask 生成 ASCII 安全的 JSON,所以它可能一切都很好。
    猜你喜欢
    • 2012-04-26
    • 2011-05-17
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多