python脚本中的回调

时间:2013-06-18 23:53:25

标签: python ajax json api callback

我之前从未使用过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+ ")"

我知道我会用我要求提供数据的网站的网址替换此文本中的网址。但是,我用什么替换回调?

我也明白我需要进行一次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);

2 个答案:

答案 0 :(得分:0)

这看起来像是对通常用于绕过作为浏览器一部分的跨域安全限制的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代理发出此请求(您可能会这样做),您可以关闭callback参数以检索标准json数据有效负载并将该值返回给请求客户端。

答案 1 :(得分:0)

我遇到了同样的问题,我在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);