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 がそれを見つけて、それを udsing していることは知っていますが、セットアップが正しく行われたかどうかはわかりません。

 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

Use this middleware while you're developing, and disable it when you put everything into production.

Edit:

As for the Javascript side of things, I've just tested this and it works ok. It does require jQuery and the middleware to be installed though.

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 に答える