1063 Stimmen

HTTP-GET-Anfrage in JavaScript?

Ich muss eine HTTP GET Anfrage in JavaScript. Wie kann man das am besten machen?

Ich muss dies in einem Dashcode-Widget für Mac OS X tun.

16 Stimmen

Beachten Sie, dass dies der Politik der gleichen Herkunft unterliegt. de.wikipedia.org/wiki/Gleicher_Ursprung_Politik

7 Stimmen

Die Antworten auf diese Frage sind wie eine Geschichtsstunde

1472voto

Joan Punkte 14086

Browser (und Dashcode) stellen ein XMLHttpRequest-Objekt zur Verfügung, das für HTTP-Anfragen aus JavaScript verwendet werden kann:

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
    xmlHttp.send( null );
    return xmlHttp.responseText;
}

Von synchronen Anfragen wird jedoch abgeraten, und es wird eine Warnung in der Art von:

Hinweis: Beginnend mit Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), synchrone Anfragen auf dem Hauptthread sind veraltet wegen der negativen Auswirkungen auf das Nutzererlebnis.

Sie sollten eine asynchrone Anfrage stellen und die Antwort in einem Event-Handler verarbeiten.

function httpGetAsync(theUrl, callback)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
            callback(xmlHttp.responseText);
    }
    xmlHttp.open("GET", theUrl, true); // true for asynchronous 
    xmlHttp.send(null);
}

277voto

Peter Gibson Punkte 17875

Die neue window.fetch API ist ein sauberer Ersatz für XMLHttpRequest die auf ES6-Versprechen zurückgreift. Es gibt eine schöne Erklärung aquí aber es läuft auf Folgendes hinaus (aus dem Artikel):

fetch(url).then(function(response) {
  return response.json();
}).then(function(data) {
  console.log(data);
}).catch(function() {
  console.log("Booo");
});

Browser-Unterstützung ist jetzt in den neuesten Versionen gut (funktioniert in Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), Android-Browser und Chrome für Android), aber IE wird wahrscheinlich keine offizielle Unterstützung erhalten. GitHub hat ein Polyfill verfügbar, die empfohlen wird, um ältere Browser zu unterstützen, die noch weitgehend in Gebrauch sind (insbesondere Versionen von Safari vor März 2017 und mobile Browser aus demselben Zeitraum).

Ich denke, ob dies bequemer ist als jQuery oder XMLHttpRequest oder nicht, hängt von der Art des Projekts ab.

Hier ist ein Link zu den Spezifikationen https://fetch.spec.whatwg.org/

Modifier :

Mit ES7 async/await wird dies einfach (basierend auf dieser Gist ):

async function fetchAsync (url) {
  let response = await fetch(url);
  let data = await response.json();
  return data;
}

214voto

Pistos Punkte 22071

In jQuery :

$.get(
    "somepage.php",
    {paramOne : 1, paramX : 'abc'},
    function(data) {
       alert('page content: ' + data);
    }
);

181voto

tggagne Punkte 2794

Viele große Ratschläge oben, aber nicht sehr wiederverwendbar, und zu oft mit DOM Unsinn und andere Fluff, dass die einfache Code versteckt gefüllt.

Hier ist eine Javascript-Klasse, die wir erstellt haben und die wiederverwendbar und einfach zu benutzen ist. Derzeit gibt es nur eine GET-Methode, aber das reicht für uns aus. Das Hinzufügen einer POST-Methode sollte niemandes Fähigkeiten überfordern.

var HttpClient = function() {
    this.get = function(aUrl, aCallback) {
        var anHttpRequest = new XMLHttpRequest();
        anHttpRequest.onreadystatechange = function() { 
            if (anHttpRequest.readyState == 4 && anHttpRequest.status == 200)
                aCallback(anHttpRequest.responseText);
        }

        anHttpRequest.open( "GET", aUrl, true );            
        anHttpRequest.send( null );
    }
}

Die Verwendung ist so einfach wie:

var client = new HttpClient();
client.get('http://some/thing?with=arguments', function(response) {
    // do something with response
});

102voto

aNieto2k Punkte 1011

Eine Version ohne Rückruf

var i = document.createElement("img");
i.src = "/your/GET/url?params=here";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X