我之前从未使用过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);
答案 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);