2017-08-30 77 views
1

我是Jquery的新手,下面的脚本不会在HTML页面上产生任何输出。从python脚本发送JSON到JQuery

问题

在我的剧本,我使用requests库发送GET请求返回一个JSON对象的烧瓶中的URL。然后需要将该对象发送给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> 

回答

3

要打印的Python数据结构,而不是JSON。 requests.json()将Flask响应解码为Python字典,列表,字符串,数字,布尔值以及可能的None。这不是JSON数据。

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

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

+0

我应该使用'response.text'然后在JQuery中使用'dataType:'json''吗?不需要转换,我只需要从Jquery – omrakhur

+0

@omrakhur中的键中提取值:然后只需输出Unicode文本的'response.text',或直接将'response.content'写入'sys.stdout。缓冲区“来避免从字节解码并再次编码。 –

+0

我在'response.content'和'response.text'之间有些困惑。如果我使用前者,那么当它返回给JQuery时它仍然会被视为JSON吗? – omrakhur