JQuery不会得到json?

时间:2011-03-12 06:37:10

标签: javascript jquery json

所以我试图完成从谷歌获取json数据的简单任务,但是这一点jquery代码将无法运行。请你帮我弄明白为什么?

  <script src="http://code.jquery.com/jquery-latest.js"></script>

  <script>
  $(document).ready(function(){
    $.getJSON("http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false", function(jsondata) {
            alert(jsondata.status);
    });
  });
  </script>

最佳解决方案:添加“&amp; callback =?”到网址的末尾。非常感谢你们的帮助!

5 个答案:

答案 0 :(得分:12)

是的,这绝对是同源政策的错误。

似乎是最新版本的Google Maps API(v3)does not support jsonp。因此,如果您想进行地理编码,则需要使用maps api:

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>

<script>
    $(document).ready(function(){
        var loc = "1600 Amphitheatre Parkway, Mountain View, CA";
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( {'address': loc },
            function(data, status) { console.log(data); });
    });
</script>

其他替代方案:

答案 1 :(得分:5)

它被称为Same Origin Policy。简而言之:您的代码所在的域是您的javascript可以与之通信的唯一域(默认情况下)

你得到这样的错误:

XMLHttpRequest cannot load http://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false. Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin.

答案 2 :(得分:4)

尝试添加&amp; callback =?到你的URL字符串。它可能有用。

有关详细信息,请参阅此处&gt; XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin

答案 3 :(得分:1)

我有同样的问题。试图从服务器获取json我没有访问权限(=&gt;没有JSONP)。

我找到了http://benalman.com/projects/php-simple-proxy/ 将php代理添加到您的服务器并对此文件执行ajax调用。

$.ajax({
   type: 'GET',
   url:'proxy.php?url=http://anyDomain.com?someid=thispage',
   dataType: "json",
   success: function(data){
      // success_fn(data);
   },
   error: function(jqXHR, textStatus, errorThrown) {
      // error_fn(jqXHR, textStatus, errorThrown);
   }
});

其中proxy.php(来自Ben Alman的文件)托管在您的域中


替代方案(我发现这是第二好的): http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

答案 4 :(得分:0)

确保它不是跨域问题。我想,要让jQuery能够调用其他域URL,您需要以某种特殊格式指定URL。我不记得了,但也许是“?” (问号)附在URL的末尾?