在javascript中从JSON获取位置

时间:2013-12-10 06:00:51

标签: javascript android json cordova jsonp

我现在正在使用phonegap android应用程序,我需要用户的当前地址,所以我用过这个 JSON api

这是我从JSON api获取位置更新数据的代码

$.ajax('http://maps.googleapis.com/maps/api/geocode/json?latlng=26.9008773,75.7403539&sensor=true', {
        dataType: 'jsonp',
        timeout: 3000,
        data: {
            _method: 'GET'
        },
        success: function (data,status) {
            if (data._status != 200) {
                console.log('received error', data._status);
                // handle error
            }else{
                console.log('received data', data);
                // do something useful with the data
                }
            },
        error: function(data,status) {
                var myObject = JSON.stringify(data);
                console.log("Data Returned is " + myObject);
                console.log("Status is " + status);
                alert('error');
            },
        complete: function(data, status) {
                alert('complete');
            }
    }); 

每次进入错误部分,然后完整部分,永远不会进入成功部分。 控制台输出是:

    12-10 11:11:34.393: I/Web Console(10620): Data Returned is {"readyState":4,"status":404,"statusText":"error"} at file:///android_asset/www/index.html:263
    12-10 11:11:34.393: I/Web Console(10620): Status is error at file:///android_asset/www/index.html:264

有谁能告诉我,究竟问题在哪里?

3 个答案:

答案 0 :(得分:0)

如果我没记错,PhoneGap中的默认安全策略是阻止所有网络访问。您需要将http://maps.googleapis.com列入白名单。

答案 1 :(得分:0)

    ajax_call ='http://maps.googleapis.com/maps/api/geocode/json?latlng=26.9008773,75.7403539&sensor=true';
    $.ajax({
       type: "GET",
       url: ajax_call,
       cache:false,
       dataType: "json",
       success: function(response){
                $.each(response.results, function(key, value) {                       
                            //alert(value.formatted_address);   
                             console.log(value.formatted_address);                                       
                });
       }
    }).done(function() {

    })

答案 2 :(得分:0)

您请求的api不支持jsonp,最终请求将是这样的:

http://maps.googleapis.com/maps/api/geocode/json?callback=jQuery18309743240959942341_1386656119920&latlng=26.9008773,75.7403539&sensor=true&_method=GET&_=1386656120107

使用回调参数,但输出仍然是json,而不是像

这样的javsscript文件
jQuery18309743240959942341_1386656119920(jsonDataHere...)

看看这个:https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse,它会像这样请求网址

https://maps.googleapis.com/maps/api/js/GeocodeService.Search?5m2&1d40.714224&2d-73.96145200000001&7sUS&9sen&callback=_xdc_._4cni6z&token=46423

输出是:

_xdc_._4cni6z && _xdc_._4cni6z( { ....

那是jsonp。