【问题标题】:Callback in python scriptpython脚本中的回调
【发布时间】:2013-06-15 08:57:51
【问题描述】:

我以前从未使用过 python。因此,我有点困惑。我正在尝试使用 python 脚本从教育 api 获取数据。我不确定我将如何做到这一点。我有以下 python 脚本:

#!/usr/bin/python

# Import modules for CGI handling 
import cgi, cgitb
import urllib2 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

#download data from request parameter 'url' 
print "Content-type:text/xml\r\n\r\n"  
url = form.getvalue("url") 
callback = form.getvalue("callback")
req = urllib2.Request(url) 
response = urllib2.urlopen(req) 
data = response.read() 
print callback + "(" + data+ ")"

我知道我会将此文本中的 url 替换为我从中请求数据的网站的 url。但是,我用什么替换回调?

我也知道我需要进行 ajax 调用来检索浏览器中的 json 数据。我该怎么做?

我必须返回 json 的代码如下:

$.ajax({
url : "getData.py",
data : {url : "http://api.education.com/service/service.php?f=schoolSearch&key=mykey&
sn=sf&v=4&city=Atlanta&state=ga&Resf=json"},
complete : function(xhr, result) {
if (result != "success")
return;
var response = xhr;
console.log(var);

【问题讨论】:

  • 如果您以前从未使用过 Python,我强烈建议您先编写一个独立程序来访问 API,然后再尝试将其封装在 CGI 中。 (实际上,我根本不会使用 CGI;现代的 WSGI 更简单、更强大,并且还有更多最新的教程可以帮助您入门。)
  • 同时,尚不清楚您的代码到底应该做什么。给我们一个链接,指向您复制和粘贴的任何教程或示例,我们可能会猜到应该发生什么。没有它,这几乎是不可能的。

标签: python ajax json api callback


【解决方案1】:

这看起来像是对通常用于绕过作为浏览器一部分的跨域安全限制的 JSONP 语法的引用。您可以将其视为以下格式的交互:

standard request:
  url => json payload

jsonp request:
  url?callback=something => something(json_payload)

如果你传递了

,jQuery 通常会为你填写回调参数
dataType: "jsonp"

按照本文档中的说明标记到您的 ajax 请求:http://api.jquery.com/jQuery.ajax/

所以关于回调参数的问题的答案是“您想要处理响应的任何方法”。这在 JavaScript 环境中被严格使用,以在没有中介的情况下跨域发出请求。如果您使用 Python 代理发出此请求(您似乎可以这样做),您只需关闭回调参数即可检索标准 json 数据负载并将该值返回给请求客户端。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我在this 网站上找到了清晰的大量示例

    #!/usr/bin/python
    
    # Import modules for CGI handling 
    import cgi, cgitb
    import urllib2 
    
    # Create instance of FieldStorage 
    form = cgi.FieldStorage() 
    
    #download data from request parameter 'url' 
    print "Content-type:text/xml\n"  
    url = form["url"].value
    callback = form["callback"].value
    req = urllib2.Request(url) 
    response = urllib2.urlopen(req) 
    data = response.read() 
    print callback + "(" + data.replace("\n", "\\n") + ")"
    

    客户端代码

    $.ajax({
    url : "/cgi-bin/getData.py",
    data : {url : "http://api.education.com/service/service.php?f=schoolSearch&key=mykey&
    sn=sf&v=4&city=Atlanta&state=ga&Resf=json"},
    complete : function(xhr, result) {
    if (result != "success")
    return;
    var response = xhr;
    console.log(var);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2013-10-10
      • 2022-08-12
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多