JQuery bekommt json nicht?

Lesezeit: 5 Minuten

JQuery bekommt json nicht
Andreas

Ich versuche also, die einfache Aufgabe zu erledigen, JSON-Daten von Google zu erhalten, aber dieses kleine Stück JQuery-Code wird nicht ausgeführt. Würden Sie mir bitte helfen, herauszufinden, warum?

  <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>

Beste Lösung: “&callback=” hinzufügen bis zum Ende der URL. Vielen Dank für all eure Hilfe Jungs!

  • warum Leute nicht verwenden console.log() Für mich nicht nachvollziehbar…

    – Philwinkel

    12. März 11 um 6:45 Uhr

  • wusste nicht das ich das gebrauchen kann…

    – Andreas

    12. März 11 um 6:46 Uhr

  • verwenden Sie es anstelle von alert(). Abhängig von Ihrem Browser sollten Sie eine Debug-Konsole haben. Firebug in Firefox funktioniert sehr gut, Chrome ist eingebaut (Strg+Shift+i)

    – Philwinkel

    12. März 11 um 6:50 Uhr

  • Verwenden Sie dies, um eine Karte anzuzeigen?

    – Shaz

    12. März ’11 um 7:00 Uhr

  • console.log ist nett, verursacht aber Skriptfehler in IE9, es sei denn, die Debug-Konsole ist geöffnet.

    – Mikael Östberg

    18. Februar 13 um 21:21 Uhr

JQuery bekommt json nicht
Pandincus

Ja, das ist absolut ein Bug in der Same Origin Policy.

Es scheint, dass die neueste Version der Google Maps API (v3) unterstützt jsonp nicht. Wenn Sie also geocodieren möchten, müssen Sie die Karten-API verwenden:

<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>

Andere Alternativen:

  • Verwenden Sie einen „Proxy“-Dienst, wie ctcherry betonte, um die Daten für Sie abzurufen.
  • Verwenden Sie das Alte V2-API mit JSONP, aber Sie benötigen einen Maps-API-Schlüssel.

Es heißt die Gleiche Ursprungsrichtlinie. Kurz gesagt: Die Domain, auf der sich Ihr Code befindet, ist die einzige Domain, mit der Ihr Javascript kommunizieren kann (standardmäßig).

Sie erhalten einen Fehler wie diesen:

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.

  • Nun, vielen Dank für den Hinweis auf mein Problem. Kennen Sie eine Lösung für diese Art von Problem?

    – Andreas

    12. März 11 um 6:56 Uhr

  • Sie können mit PHP oder einer anderen Skriptsprache einen lokalen Proxy erstellen, der den URI als Variable akzeptiert und abruft. Dann gibt PHP/other das Ergebnis zurück.

    – Philwinkel

    12. März ’11 um 7:00 Uhr

  • Sie möchten diese Anforderung über einen serverseitigen Code weiterleiten, der auf derselben Domäne wie das Javascript ausgeführt wird. Außerdem: Wenn Sie die Domain, die Sie anrufen, kontrollieren, können Sie spezielle Header verwenden (w3.org/TR/cors), um domänenübergreifende Anfragen zuzulassen. Aber da es Google ist, können Sie die Header nicht zu ihrem Code hinzufügen. Eine andere Möglichkeit besteht darin, dass ihre API JSONP unterstützt, wodurch die JSON-Antwort in einen Rückruf eingeschlossen werden kann, der Ihren Code aufruft (ibm.com/developerworks/library/wa-aj-jsonp1) nicht sicher, ob diese API dies unterstützt, also müssen Sie das überprüfen

    – Kirsche

    12. März 11 um 7:01 Uhr

  • Lassen Sie uns eines klarstellen: Same Origin Policy allein ist nicht der Grund, warum Sie keine Daten von der Geocoding-API wie im OP-Code erhalten können. Der Grund, warum Sie das nicht können, ist, dass Google es nicht will. Dieselbe Ursprungsrichtlinie bedeutet, dass ein Skript, das von einer bestimmten Domäne A heruntergeladen wurde, keine Daten von einer anderen Domäne B laden kann, es sei denn, Domäne B erlaubt dies ausdrücklich (durch Verwendung eines bestimmten HTTP-Headers in der Antwort).

    – matt

    10. Dezember 11 um 17:52 Uhr

  • Man würde vernünftigerweise erwarten, dass die Google Maps-API den domänenübergreifenden Zugriff zulässt, was sie bis vor kurzem tat. Jetzt erlaubt er es nicht mehr; Ich denke, sie behaupten Sicherheitsgründe, aber ich denke auch, der wahre Grund ist, Sie zu verpflichten, nur ihren Code zu verwenden, um ihren Dienst zu erhalten. Die einzige Möglichkeit, die Daten per Javascript vom Client abzurufen, besteht also darin, die Javascript-API von Google zu verwenden, die Ihnen sowieso fast die gleiche Flexibilität bietet wie ein direkter Aufruf der API-URL.

    – matt

    10. Dezember 11 um 17:52 Uhr

1642305548 260 JQuery bekommt json nicht
neebz

Versuchen Sie, &callback= hinzuzufügen? zu Ihrer URL-Zeichenfolge. Es kann funktionieren.

Siehe dies für Details > XmlHttpRequest-Fehler: Origin null ist von Access-Control-Allow-Origin nicht zulässig

  • Leider sieht es so aus, als würde dies in der neusten Version der Google Maps API nicht mehr funktionieren.

    – Pandinkus

    12. März 11 um 7:01 Uhr

Ich hatte das gleiche Problem. Ich versuche, JSON von einem Server zu bekommen, auf den ich keinen Zugriff hatte (=> kein JSONP).

ich fand http://benalman.com/projects/php-simple-proxy/
Fügen Sie den PHP-Proxy zu Ihrem Server hinzu und führen Sie den Ajax-Aufruf für diese Datei aus.

$.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);
   }
});

wobei proxy.php (die Datei von Ben Alman) in Ihrer Domain gehostet wird


Alternative (die ich als zweitbeste fand):
http://james.padolsey.com/javascript/domainübergreifende-anfragen-mit-jquery/

Stellen Sie sicher, dass es sich nicht um ein domänenübergreifendes Problem handelt. Ich denke, damit jQuery andere Domain-URLs aufrufen kann, müssen Sie die URL in einem speziellen Format angeben. Ich erinnere mich nicht genau, aber vielleicht ist das “?” (Fragezeichen) am Ende der URL angehängt?

.

500430cookie-checkJQuery bekommt json nicht?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy