1

我以前从未使用过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);
4

2 回答 2

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 代理发出此请求(您似乎可以这样做),您只需关闭回调参数即可检索标准 json 数据有效负载并将该值返回给请求客户端。

于 2013-06-19T00:13:46.987 回答
0

我有同样的问题,我在这个网站上找到了明确的广泛示例

#!/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);
于 2020-05-16T19:35:23.103 回答