0

现在,我正在尝试从education.com API 访问数据。但是,我仍然无法这样做。

基本上,据我了解,我应该使用这个 python 脚本来抑制浏览器的跨域限制。python 脚本名为 getData.py,我使用的是以下代码。逐字:

#!/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+ ")"

然后,我需要通过 $.getJSON 在我的 JavaScript/jQuery 代码中调用 python 脚本。我的教授说我需要传递教育 API 的 url,并回调这个脚本。我不确定我将如何做到这一点。我该怎么做?我的回调是什么?这是我的jQuery代码。为了隐私,我从网址中删除了我的密钥。它被单词mykey取代。

$.getJSON("getData.py", { url: "http://api.education.com/service/service.php?
f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Re
sf=json"}, function(data) {  
console.log(data);
});
});
4

1 回答 1

0

将检索到的数据序列化为 json。

#!/usr/bin/python 

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

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

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

包含callback=?在网址中。( http://api.jquery.com/jQuery.getJSON/ )

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
        <script type="text/javascript">
            var jsonp_url = "cgi-bin/getData.py";
            var url = "http://api.education.com/service/service.php?f=schoolSearch&key=mykey&sn=sf&v=4&city=Atlanta&state=ga&Resf=json";
            $.getJSON(jsonp_url + '?callback=?', {
                url: url
            }, function(data) {
                console.log(data);
                $('body').text(data);
            });
        </script>
    </head>

    <body>
    </body>
<html>
于 2013-06-20T03:11:26.517 回答