Ich muss eine HTTP-GET- Anfrage in JavaScript ausführen. Was ist der beste Weg das zu tun?
Ich muss dies in einem Mac OS X Dashcode-Widget tun.
javascript
xcode
http-get
dashcode
mclaughlinj
quelle
quelle
Antworten:
Browser (und Dashcode) stellen ein XMLHttpRequest-Objekt bereit, mit dem HTTP-Anforderungen aus JavaScript gestellt werden können:
Von synchronen Anforderungen wird jedoch abgeraten, und es wird eine Warnung in der folgenden Richtung generiert:
Sie sollten eine asynchrone Anforderung stellen und die Antwort in einem Ereignishandler verarbeiten.
quelle
In jQuery :
quelle
Viele gute Ratschläge oben, aber nicht sehr wiederverwendbar und zu oft mit DOM-Unsinn und anderen Flusen gefüllt, die den einfachen Code verbergen.
Hier ist eine von uns erstellte Javascript-Klasse, die wiederverwendbar und einfach zu verwenden ist. Derzeit gibt es nur eine GET-Methode, aber das funktioniert bei uns. Das Hinzufügen eines POST sollte die Fähigkeiten von niemandem belasten.
Die Verwendung ist so einfach wie:
quelle
ReferenceError: XMLHttpRequest is not defined
Die neue
window.fetch
API ist ein sauberer Ersatz dafürXMLHttpRequest
, der ES6-Versprechen nutzt. Es gibt eine schöne Erklärung hier , aber es läuft darauf hinaus, (aus dem Artikel):Die Browserunterstü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), IE jedoch wahrscheinlich keine offizielle Unterstützung bekommen. GitHub verfügt über eine Polyfüllung , die empfohlen wird, um ältere Browser zu unterstützen, die noch weitgehend verwendet werden (insbesondere Versionen von Safari vor März 2017 und mobile Browser aus derselben Zeit).
Ich denke, ob dies bequemer als jQuery oder XMLHttpRequest ist oder nicht, hängt von der Art des Projekts ab.
Hier ist ein Link zur Spezifikation https://fetch.spec.whatwg.org/
Bearbeiten :
Bei Verwendung von ES7 async / await wird dies einfach (basierend auf dieser Zusammenfassung ):
quelle
fetch(url, { credentials:"include" })
window.fetch
wird nicht mit einem XML-Parser geliefert, aber Sie können die Antwort selbst analysieren, wenn Sie sie als Text behandeln (nicht json wie im obigen Beispiel). Ein Beispiel finden Sie unter stackoverflow.com/a/37702056/66349Eine Version ohne Rückruf
quelle
setInterval
Anruf eingewickelt .Hier ist Code, um dies direkt mit JavaScript zu tun. Wie bereits erwähnt, sind Sie mit einer JavaScript-Bibliothek viel besser dran. Mein Favorit ist jQuery.
Im folgenden Fall wird eine ASPX-Seite (die als REST-Service eines armen Mannes fungiert) aufgerufen, um ein JavaScript-JSON-Objekt zurückzugeben.
quelle
quelle
Kurz und sauber:
quelle
Der IE speichert URLs zwischen, um das Laden zu beschleunigen. Wenn Sie jedoch beispielsweise in regelmäßigen Abständen einen Server abfragen, um neue Informationen abzurufen, speichert der IE diese URL zwischen und gibt wahrscheinlich denselben Datensatz zurück, den Sie immer hatten.
Unabhängig davon, wie Sie am Ende Ihre GET-Anforderung ausführen - Vanille-JavaScript, Prototyp, jQuery usw. - stellen Sie sicher, dass Sie einen Mechanismus zur Bekämpfung des Caching eingerichtet haben. Um dem entgegenzuwirken, hängen Sie ein eindeutiges Token an das Ende der URL an, auf die Sie zugreifen möchten. Dies kann erfolgen durch:
Dadurch wird ein eindeutiger Zeitstempel an das Ende der URL angehängt und ein Zwischenspeichern verhindert.
quelle
Prototyp macht es ganz einfach
quelle
Eine Lösung, die ältere Browser unterstützt:
Vielleicht etwas übertrieben, aber mit diesem Code gehen Sie definitiv auf Nummer sicher.
Verwendungszweck:
quelle
Ich bin nicht mit Mac OS Dashcode-Widgets vertraut, aber wenn Sie damit JavaScript-Bibliotheken verwenden und XMLHttpRequests unterstützen können , würde ich jQuery verwenden und Folgendes tun:
quelle
Vergessen Sie nicht, in der Info.plist-Datei Ihres Widgets Ihren
AllowNetworkAccess
Schlüssel auf true zu setzen.quelle
Am besten verwenden Sie AJAX (ein einfaches Tutorial finden Sie auf dieser Seite Tizag ). Der Grund dafür ist, dass für jede andere Technik, die Sie möglicherweise verwenden, mehr Code erforderlich ist. Es ist nicht garantiert, dass sie ohne Nacharbeit browserübergreifend funktioniert. Außerdem müssen Sie mehr Client-Speicher verwenden, indem Sie versteckte Seiten in Frames öffnen, die URLs übergeben, deren Daten analysieren und schließen. AJAX ist der richtige Weg in dieser Situation. Dass meine zwei Jahre Javascript schwere Entwicklung sprechen.
quelle
Für diejenigen, die AngularJs verwenden , ist es
$http.get
:quelle
Sie können eine HTTP-GET-Anforderung auf zwei Arten erhalten:
Dieser Ansatz basiert auf dem XML-Format. Sie müssen die URL für die Anfrage übergeben.
Dieser basiert auf jQuery. Sie müssen die URL und den Funktionsnamen angeben, die Sie aufrufen möchten.
quelle
Zu diesem Zweck wird die Fetch-API unter Verwendung von JavaScript-Versprechungen empfohlen. XMLHttpRequest (XHR), IFrame-Objekt oder dynamische Tags sind ältere (und klobigere) Ansätze.
Hier ist eine großartige Fetch-Demo und MDN-Dokumente
quelle
Gleiches gilt auch für Post-Anfragen.
Werfen Sie einen Blick auf diesen Link JavaScript-Post-Anfrage wie ein Formular senden
quelle
Einfache asynchrone Anfrage:
quelle
Ajax
Verwenden Sie am besten eine Bibliothek wie Prototype oder jQuery .
quelle
quelle
Wenn Sie den Code für ein Dashboard-Widget verwenden möchten und nicht in jedes von Ihnen erstellte Widget eine JavaScript-Bibliothek aufnehmen möchten, können Sie das von Safari nativ unterstützte Objekt XMLHttpRequest verwenden.
Wie von Andrew Hedges berichtet, hat ein Widget standardmäßig keinen Zugriff auf ein Netzwerk. Sie müssen diese Einstellung in der dem Widget zugeordneten info.plist ändern.
quelle
Um die beste Antwort von Joann mit Versprechen aufzufrischen, ist dies mein Code:
quelle
Modern, sauber und am kürzesten
Code-Snippet anzeigen
quelle
Sie können es auch mit reinem JS tun:
Siehe: für weitere Details: html5rocks Tutorial
quelle
quelle
Hier ist eine Alternative zu XML-Dateien, mit der Sie Ihre Dateien als Objekt laden und sehr schnell auf Eigenschaften als Objekt zugreifen können.
XML funktioniert als Baum ok? anstatt zu schreiben
Schreiben Sie eine einfache Datei wie folgt:
Speichern Sie Ihre Datei .. Rufen Sie nun die Funktion auf ....
Jetzt können Sie Ihre Werte effizient erhalten.
Es ist nur ein kleines Geschenk, um zur Gruppe beizutragen. Danke von dir :)
Wenn Sie die Funktion lokal auf Ihrem PC testen möchten, starten Sie Ihren Browser mit dem folgenden Befehl neu (von allen Browsern außer Safari unterstützt):
quelle