Requête HTTP GET en JavaScript?
J'ai besoin de faire un HTTP GET demande en JavaScript. Quelle est la meilleure façon de le faire?
J'ai besoin de le faire dans un Mac OS X dashcode widget.
- Notez que ceci est soumis à la Même Politique d'Origine. en.wikipedia.org/wiki/Same_origin_policy
Vous devez vous connecter pour publier un commentaire.
Navigateurs (et Dashcode) fournir un objet XMLHttpRequest qui peut être utilisé pour effectuer des requêtes HTTP à partir de JavaScript:
Cependant, les requêtes synchrones sont découragés et va générer un message d'avertissement le long des lignes de:
Vous devez faire une requête asynchrone et gérer la réponse à l'intérieur d'un gestionnaire d'événement.
xmlHttp.send(null);
. ça veut dire quoi?En jQuery:
Beaucoup de grands conseils ci-dessus, mais pas très réutilisables, et trop souvent remplis de DOM non-sens et autres peluches qui cache le code facile.
Voici une classe Javascript nous avons créé réutilisable et facile à utiliser. Actuellement, il n'a qu'une méthode GET, mais qui fonctionne pour nous. L'ajout d'un POST ne taxent pas les compétences de quelqu'un.
Son utilisation est aussi simple que:
ReferenceError: XMLHttpRequest is not defined
La nouvelle
window.fetch
API est un nettoyeur de remplacement pourXMLHttpRequest
qui rend l'utilisation de l'ES6 promesses. Il y a une bonne explication ici, mais elle se résume à l' (de l'article):Prise en charge du navigateur est maintenant le bon dans les dernières versions (fonctionne dans Chrome, Firefox, Edge (v14), Safari (v10.1), Opera, Safari iOS (v10.3), le navigateur Android et de Chrome pour Android), mais IE ne sera probablement pas obtenir un soutien officiel. GitHub a un polyfill disponible, il est recommandé de soutenir les anciens navigateurs encore largement en usage (esp versions de Safari avant Mars 2017 et les navigateurs mobiles à partir de la même période).
Je suppose que c'est plus pratique que jQuery ou XMLHttpRequest ou pas ne dépend pas de la nature du projet.
Voici un lien pour les specs https://fetch.spec.whatwg.org/
Modifier:
À l'aide de ES7 async/await, cela devient tout simplement (basé sur ce Gist):
fetch(url, { credentials:"include" })
Une version sans rappel
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 (c'est de l'entretien comme un pauvre homme du RESTE un service) est appelée pour retourner un objet JSON JavaScript.
Un copier-coller des prêts à la version
IE cache des URLs afin de rendre le chargement plus rapide, mais si vous êtes, disons, de l'interrogation d'un serveur à intervalles d'essayer d'obtenir de nouvelles informations, IE ne cache que l'URL et retourne probablement le même ensemble de données que vous avez toujours eu.
Indépendamment de la façon dont vous finissez par faire votre demande GET - vanille JavaScript, Prototype, jQuery, etc - assurez-vous de mettre en place un mécanisme pour lutter contre la mise en cache. Pour lutter contre cela, ajoutez un jeton unique à la fin de l'URL que vous allez frapper. Cela peut être fait par:
Cela ajoute un unique horodatage à la fin de l'URL et empêche toute mise en cache de passe.
Court et pure:
JS:
Prototype rend simple morts
Je ne suis pas familier avec Mac OS Dashcode Widgets, mais si ils vous permettent d'utiliser les bibliothèques JavaScript et le soutien XMLHttpRequests, j'utiliserais jQuery et faire quelque chose comme ceci:
Une solution de soutenir les navigateurs plus anciens:
Peut-être un peu exagéré, mais vous avez certainement aller en sécurité avec ce code.
Utilisation:
Dans votre widget Info.fichier plist, n'oubliez pas de mettre votre
AllowNetworkAccess
clef du vrai.Le meilleur moyen 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 pour fonctionner de la croix-navigateur, sans retouches et nécessite l'utilisation de plus de mémoire dans le client par l'ouverture des pages cachées à l'intérieur de cadres en passant url de l'analyse de leurs données et de les fermer.
AJAX est le chemin à parcourir dans cette situation. Que mes deux années de javascript lourds développement de parler.
Pour ceux qui utilisent AngularJs, c'est
$http.get
:Vous pouvez obtenir une demande HTTP GET de deux façons:
Cette approche basée sur le format xml. Vous devez passer l'URL de la requête.
Celui-ci est basé sur jQuery. Vous devez spécifier l'URL et function_name que vous souhaitez appeler.
Même chose peut être fait pour poster demande.
Jetez un oeil à ce lien JavaScript requête post comme la soumission d'un formulaire
Pour ce faire, aller Chercher de l'API est l'approche recommandée, à l'aide de JavaScript Promesses. XMLHttpRequest (XHR), objet IFrame ou tags dynamiques sont plus âgés (et moins agiles) approches.
Ici est un grand récupérer la démo et MDN docs
Simple demande asynchrone:
Ajax
Vous seriez mieux à l'aide d'une bibliothèque comme Prototype ou jQuery.
Si vous souhaitez utiliser le code d'un widget, et vous ne voulez pas inclure une bibliothèque JavaScript dans chaque widget que vous avez créé, vous pouvez utiliser l'objet XMLHttpRequest que Safari supporte nativement.
Tel que rapporté par Andrew Couvertures, un widget n'ont pas accès à un réseau, par défaut, vous devez modifier ce paramètre dans l'info.plist associés avec le widget.
Pour actualiser meilleure réponse de joann avec promesse, c'est mon code:
Vous pouvez le faire avec de la pure JS trop:
Voir: pour plus de détails: html5rocks tutoriel
Ici est une alternative à des fichiers xml pour charger vos fichiers comme un objet, et d'accéder à des propriétés comme un objet de façon très rapide.
XML fonctionne comme un arbre ok? au lieu d'écrire
écrire un simple fichier comme ceci:
Enregistrer votre fichier ..
Maintenant appeler la fonction ....
maintenant vous pouvez obtenir vos valeurs efficacement.
C'est juste un petit cadeau pour contribuer au groupe. Merci de votre goût 🙂
Si vous voulez tester la fonction sur votre PC en local, redémarrez votre navigateur avec la commande suivante (pris en charge par tous les navigateurs, sauf safari):