jquery .ajax()方法失败

时间:2011-05-10 16:55:57

标签: javascript jquery

有谁能告诉我这个javascript可能有什么问题?

        $.ajax({
            cache:false,
            url: 'http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false',
            success: function(data, textStatus, jqXHR) {
                console.log('success');
                console.log(data);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log('error');
                console.log(errorThrown);
                console.log(jqXHR);
            }
        });

调用'error'事件处理函数,这是我的控制台输出:

error
undefined
XMLHttpRequest { mozResponseArrayBuffer=ArrayBuffer, status=0, more...}

我正在尝试学习如何使用jquery进行ajax调用,而且我还是很陌生。

3 个答案:

答案 0 :(得分:3)

我认为您正在执行跨域请求,该请求已被您的浏览器阻止。

您可以直接使用Maps API,它有方便的方法。

<强> Maps Documentation

function codeAddress() {
  var address = document.getElementById("address").value;
  geocoder.geocode( { 'address': address}, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      map.setCenter(results[0].geometry.location);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location
      });
    } else {
      alert("Geocode was not successful for the following reason: " + status);
    }
  });
} 

答案 1 :(得分:0)

我刚刚通过JSFiddle运行这段代码并得到了同样的错误问题。

然而,当我直接转到请求URL时,我得到了这个JSON块:

{
  "status": "REQUEST_DENIED",
  "results": [ ]
}

你得到的相同吗?

答案 2 :(得分:0)

  • 第一个问题是你不能在没有额外工作的情况下制作跨域Ajax请求 - 你必须使用JSONP而不仅仅是'普通'JSON,或者服务器必须允许CDR通过适当的访问控制标头 [ref]

  • 然而,更大的问题是,使用API​​的v3,Google已经取消了发出JSONP请求的能力(或者至少目前没有记录)。他们希望您使用Google Maps library geocoder代替:

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({
                    'address': '1600+Amphitheatre+Parkway,+Mountain+View'
                     },
    
                     function(data, status){
                          console.log(data); //data is an array of results
                     });
    

目前,如果您绝对必须拥有Ajax地理编码但又不想使用Google Maps JS库中内置的地理编码器,则可以回退到v2 API:< / p>

$.ajax({
    cache: false,

    url: 'http://maps.google.com/maps/geo?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA&output=json&sensor=false&key=<your_key_here>',

    success: function(data, textStatus, jqXHR) {
        console.log('success');
        console.log(data); //geocoded data
    },

    error: function(jqXHR, textStatus, errorThrown) {
        console.log(textStatus);
        console.log(errorThrown);
        console.log(jqXHR);
    },

    jsonp: 'callback',

    dataType: 'json'
});