1

我正在开发一个 Django 服务器。我需要从这里的外部服务获取一些数据。

这是我正在使用的 JavaScript 代码:

 function getDeclination(latitude, longitude) {

        var url = 'http://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination';

        url += '?';
        url += 'lat1=' + latitude;
        url += '&'
        url += 'lon1=' + longitude;
        url += '&';
        url += 'resultFormat=xml';

        var xmlHttp = null;
        xmlHttp = new XMLHttpRequest();
        xmlHttp.open( "GET", url, false );

        xmlHttp.send();
        xml = xmlHttp.responseXML;

        var temp_d = xml.getElementsByTagName('declination');

        var string = temp_d[0].childNodes[0].nodeValue;

        string = string.substring(1, string.length - 2);

        return parseFloat(string);
    }

使用此代码调用getDeclination(46.0815605783, 13.2158580422) 会引发此错误:

 XMLHttpRequest cannot load 
 http://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination?lat1=46.0815605783&lon1=13.2158580422&resultFormat=xml. 
 Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin

我怎样才能摆脱这个问题并返回测试?

编辑:

所以我安装了中间件和JS,但我无法得到结果。也许我在安装中间件的过程中出了点问题,这对我来说是第一次。我知道 Django 找到了它,并且它正在使用它,但我不知道我是否正确完成了设置。

 XS_SHARING_ALLOWED_ORIGINS = "http://127.0.0.1:8000"
 XS_SHARING_ALLOWED_METHODS = ['POST','GET','OPTIONS', 'PUT', 'DELETE']  

我已将此代码放在settings.py 中,是否正确?因为我仍然得到同样的错误。

4

2 回答 2

1

在开发时使用此中间件,并在将所有内容投入生产时禁用它。

编辑:

至于 Javascript 方面,我刚刚对此进行了测试,它工作正常。它确实需要安装 jQuery 和中间件。

function getDeclination(latitude, longitude){
    var url = "http://www.ngdc.noaa.gov/geomag-web/calculators/calculateDeclination";

    url += "?";
    url += "lat1=" + latitude;
    url += "&"
    url += "lon1=" + longitude;
    url += "&";
    url += "resultFormat=xml";

    $.ajax({
        url: url,
        success: function(data){
            var declination = parseFloat($(data).find("declination").text());
            alert(declination);
        }
    });
}
于 2013-02-28T02:16:39.430 回答
0

最后,我实现了从服务器调用中获取偏角的代码。

为了完整起见,这里是代码:

 import urllib2 
 from xml.dom.minidom import parseString

 # build the url
 def buildUrl(latitude, longitude):
    return settings.MAGNETIC_URL + '?' + 'lat1=' + str(latitude) + '&' + 'lon1=' + str(longitude) + '&' + 'resultFormat=xml'


 # load the page from the address       
 def retrieveWeb(address):

    try:                 
            web_handle = urllib2.urlopen(address)

    except urllib2.HTTPError, e: 
            error_desc = BaseHTTPServer.BaseHTTPRequestHandler.responses[e.code][0] 
            print "Cannot retrieve URL: HTTP Error Code", e.code, "Error: ", error_desc 
            sys.exit(1)         
    except urllib2.URLError, e: 
            print "Cannot retrieve URL: " + e.reason[1] 
            sys.exit(1)         
    except:                 
            print "Cannot retrieve URL: unknown error"                 
            sys.exit(1) 

    return web_handle  


 # main function to get declination
 def retrieveDeclination(lat, lng):

    # build url
    address = buildUrl(lat, lng) 

    # get the page
    page = retrieveWeb(address)

    # get xml
    xml = page.read()  

    page.close()

    # inizio il parsin
    dom = parseString(xml)

    #retrieve the first xml tag (<tag>data</tag>) that the parser finds with name tagName:
    xmlTag = dom.getElementsByTagName('declination')[0].toxml()

    #strip off the tag (<tag>data</tag>  --->   data):
    xmlData=xmlTag.replace('<declination>','').replace('</declination>','')

    # parse the output as float
    return float(xmlData)
于 2013-02-28T13:43:19.363 回答