Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将JSON从python脚本发送到JQuery_Jquery_Python_Html_Json_Ajax - Fatal编程技术网

将JSON从python脚本发送到JQuery

将JSON从python脚本发送到JQuery,jquery,python,html,json,ajax,Jquery,Python,Html,Json,Ajax,我是Jquery的新手,下面的脚本不会在HTML页面上生成任何输出 问题: 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()

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

问题

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>
    <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>
在我的脚本中,我使用
requests
库向返回JSON对象的FlaskURL发送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>
    <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>
HTML和JQuery

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>
    <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>

正在加载事务信息

函数getlogs(){ var url='www.myserver.com/getajaxtest.py'; $.ajax({ 键入:“GET”, url:url, 数据类型:“json”, 成功:功能(数据){ $(“#transactioninfo”).html(数据) }, 错误:函数(e){ 控制台日志(e.message); } }); } $(文档).ready(函数(){ setTimeout(函数(){getlogs();},2000); setInterval(函数(){getlogs();},2000); });
您正在打印的是Python数据结构,而不是JSON
requests.json()。这不是JSON数据

只需将数据保留为JSON数据,并打印收到的文本即可。您的脚本只是一个代理,不需要解释JSON数据


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

我是否只使用
response.text
,然后在JQuery中使用
数据类型:“JSON”
?不,不需要转换,我只需要从其中的键中提取值Jquery@omrakhur:然后只需打印Unicode文本的
response.text
,或者将
response.content
直接写入
sys.stdout.buffer
以避免从字节解码并重新编码。我对
response.content
response.text
有点混淆。如果我使用前一种方法,当东西返回到JQuery时,它还会被视为JSON吗?@omrakhur:
response.content
是来自服务器的原始响应,以字节表示。JSON是一种基于文本的格式,因此您可以将字节解码为文本。这就是
响应的内容。text
值是通过文本编码解释的字节(对于JSON,通常是UTF-8)。@omrakhur:使用
print()
写入文本时必须再次对该文本进行编码,因为文件(包括终端或网络连接)只需要字节。因此,JSON文本再次被编码为字节,编码可能会有所不同。因此,对于相同的JSON数据,您可能会得到不同的结果。您没有指定如何运行Python脚本(可能是CGI脚本吗?),因此不清楚将使用什么编码。它可能只是ASCII,我知道Flask会生成ASCII安全的JSON,所以可能一切都很好。