【问题标题】:Get location from JSON in javascript从 JavaScript 中的 JSON 获取位置
【发布时间】:2013-12-27 13:05:56
【问题描述】:

我现在在 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

谁能告诉我问题出在哪里?

【问题讨论】:

    标签: javascript android json cordova jsonp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
          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() {
      
          })
      

      【讨论】:

      • 感谢回复,但未解决 - 与之前相同
      【解决方案3】:

      你请求的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,它请求这样的 url

      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。

      【讨论】:

      • 我不想在地图上显示位置,我只想在警报中显示地址文本,我是否也需要为它买票...
      • 关键部分是 geocoder.geocode({'latLng': latlng}, function(results, status) { //现在你得到了结果
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多