J'ai besoin de faire une requête HTTP GET en JavaScript. Quelle est la meilleure façon de procéder?
Je dois le faire dans un widget de code de tableau de bord Mac OS X.
javascript
xcode
http-get
dashcode
mclaughlinj
la source
la source
Réponses:
Les navigateurs (et Dashcode) fournissent un objet XMLHttpRequest qui peut être utilisé pour effectuer des requêtes HTTP à partir de JavaScript:
Cependant, les demandes synchrones sont déconseillées et généreront un avertissement du type:
Vous devez effectuer une demande asynchrone et gérer la réponse dans un gestionnaire d'événements.
la source
Dans jQuery :
la source
Beaucoup de bons conseils ci-dessus, mais pas très réutilisables, et trop souvent remplis de bêtises DOM et d'autres peluches qui cachent le code facile.
Voici une classe Javascript que nous avons créée, réutilisable et facile à utiliser. Actuellement, il n'a qu'une méthode GET, mais cela fonctionne pour nous. L'ajout d'un POST ne devrait pas taxer les compétences de quiconque.
Son utilisation est aussi simple que:
la source
ReferenceError: XMLHttpRequest is not defined
La nouvelle
window.fetch
API est un remplacement plus propreXMLHttpRequest
qui utilise les promesses ES6. Il y a une belle explication ici , mais cela se résume à (de l'article):La prise en charge du navigateur est désormais bonne dans les dernières versions (fonctionne dans Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), navigateur Android et Chrome pour Android), mais IE le fera n'obtiendra probablement pas de soutien officiel. GitHub a un polyfill disponible qui est recommandé pour prendre en charge les navigateurs plus anciens encore largement utilisés (en particulier les versions de Safari avant mars 2017 et les navigateurs mobiles de la même période).
Je suppose que cela est plus pratique que jQuery ou XMLHttpRequest ou non dépend de la nature du projet.
Voici un lien vers la spécification https://fetch.spec.whatwg.org/
Modifier :
En utilisant async / wait ES7, cela devient simplement (basé sur cet Gist ):
la source
fetch(url, { credentials:"include" })
window.fetch
n'est pas fourni avec un analyseur XML, mais vous pouvez analyser la réponse vous-même si vous la gérez comme du texte (pas json comme dans l'exemple ci-dessus). Voir stackoverflow.com/a/37702056/66349 pour un exempleUne version sans rappel
la source
setInterval
appel.Voici le code pour le faire directement avec JavaScript. Mais, comme mentionné précédemment, vous seriez beaucoup mieux avec une bibliothèque JavaScript. Mon préféré est jQuery.
Dans le cas ci-dessous, une page ASPX (qui sert de service REST pour un pauvre) est appelée pour renvoyer un objet JSON JavaScript.
la source
la source
Court et propre:
la source
IE mettra en cache les URL afin d'accélérer le chargement, mais si, par exemple, vous interrogez un serveur à intervalles réguliers pour essayer d'obtenir de nouvelles informations, IE mettra en cache cette URL et renverra probablement le même ensemble de données que vous avez toujours eu.
Quelle que soit la façon dont vous finissez par faire votre demande GET - vanilla JavaScript, Prototype, jQuery, etc. - assurez-vous de mettre en place un mécanisme pour lutter contre la mise en cache. Afin de lutter contre cela, ajoutez un jeton unique à la fin de l'URL que vous allez frapper. Cela peut être fait par:
Cela ajoutera un horodatage unique à la fin de l'URL et empêchera toute mise en cache.
la source
Un prototype simplifie la vie
la source
Une solution prenant en charge les anciens navigateurs:
Peut-être un peu exagéré, mais vous allez certainement en sécurité avec ce code.
Usage:
la source
Je ne connais pas les widgets Dashcode de Mac OS, mais s'ils vous permettent d'utiliser des bibliothèques JavaScript et de prendre en charge XMLHttpRequests , j'utiliserais jQuery et ferais quelque chose comme ceci:
la source
Dans le fichier Info.plist de votre widget, n'oubliez pas de définir votre
AllowNetworkAccess
clé sur true.la source
La meilleure façon est d'utiliser AJAX (vous pouvez trouver un tutoriel simple sur cette page Tizag ). La raison en est que toute autre technique que vous pouvez utiliser nécessite plus de code, il n'est pas garanti de fonctionner sur plusieurs navigateurs sans retravailler et vous oblige à utiliser plus de mémoire client en ouvrant des pages cachées à l'intérieur des cadres en passant des URL en analysant leurs données et en les fermant. AJAX est la voie à suivre dans cette situation. Que mes deux années de développement lourd en javascript parlent.
la source
Pour ceux qui utilisent AngularJs , c'est
$http.get
:la source
Vous pouvez obtenir une demande HTTP GET de deux manières:
Cette approche basée sur le format xml. Vous devez transmettre l'URL de la demande.
Celui-ci est basé sur jQuery. Vous devez spécifier l'URL et le nom de fonction que vous souhaitez appeler.
la source
Pour ce faire, l'API Fetch est l'approche recommandée, à l'aide de promesses JavaScript. XMLHttpRequest (XHR), objet IFrame ou balises dynamiques sont des approches plus anciennes (et plus maladroites).
Voici une excellente démonstration de récupération et des documents MDN
la source
La même chose peut être faite pour la demande de poste également.
Jetez un oeil à ce lien Demande de publication JavaScript comme un formulaire envoyer
la source
Demande d'async simple:
la source
Ajax
Vous feriez mieux d’utiliser une bibliothèque telle que Prototype ou jQuery .
la source
la source
Si vous souhaitez utiliser le code d'un widget Dashboard et que vous ne souhaitez pas inclure une bibliothèque JavaScript dans chaque widget que vous avez créé, vous pouvez utiliser l'objet XMLHttpRequest pris en charge nativement par Safari.
Comme indiqué par Andrew Hedges, un widget n'a pas accès à un réseau, par défaut; vous devez modifier ce paramètre dans le fichier info.plist associé au widget.
la source
Pour rafraîchir la meilleure réponse de joann avec promesse, voici mon code:
la source
Moderne, propre et le plus court
Afficher l'extrait de code
la source
Vous pouvez aussi le faire avec du JS pur:
Voir: pour plus de détails: tutoriel html5rocks
la source
la source
Voici une alternative aux fichiers xml pour charger vos fichiers en tant qu'objet et accéder aux propriétés en tant qu'objet de manière très rapide.
XML fonctionne comme un arbre ok? au lieu d'écrire
écrire un fichier simple comme celui-ci:
Enregistrez votre fichier .. Appelez maintenant la fonction ....
vous pouvez maintenant obtenir vos valeurs efficacement.
C'est juste un petit cadeau à contribuer au groupe. Merci de votre amour :)
Si vous souhaitez tester la fonction sur votre PC localement, redémarrez votre navigateur avec la commande suivante (prise en charge par tous les navigateurs sauf safari):
la source