Je dois faire un HTTP GET en JavaScript. Quelle est la meilleure façon de le faire ?
J'ai besoin de faire cela dans un widget dashcode Mac OS X.
Je dois faire un HTTP GET en JavaScript. Quelle est la meilleure façon de le faire ?
J'ai besoin de faire cela dans un widget dashcode Mac OS X.
Les navigateurs (et Dashcode) fournissent un objet XMLHttpRequest qui peut être utilisé pour effectuer des requêtes HTTP à partir de JavaScript :
function httpGet(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
xmlHttp.send( null );
return xmlHttp.responseText;
}
Cependant, les demandes synchrones sont déconseillées et génèrent un avertissement du type :
Remarque : à partir de Gecko 30.0 (Firefox 30.0 / Thunderbird 30.0 / SeaMonkey 2.27), les requêtes synchrones sur le thread principal ont été dépréciées en raison des effets négatifs sur l'expérience de l'utilisateur.
Vous devez faire une demande asynchrone et traiter la réponse dans un gestionnaire d'événements.
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);
}
Cette solution est intéressante, mais il convient de noter qu'IE 10 déclenche une alerte de sécurité lorsqu'il l'utilise et tente d'accéder à une url dans un domaine différent de celui de la page.
Bien sûr, Javascript l'a intégré, sinon comment une bibliothèque Javascript pourrait-elle proposer une méthode pratique pour cela ? La différence est que les méthodes pratiques offrent, eh bien, la commodité, et une syntaxe plus claire et plus simple.
Préfixe XML car il utilise le X de AJAX ~ JavaScript asynchrone et XML . Aussi, bon point concernant le " API qui a une liaison ECMAScript "est dû au fait que JavaScript peut se trouver dans beaucoup de choses, autres que les navigateurs supportant HTTP (par exemple, Adobe Reader...) C'est une bonne chose à retenir, alors chapeau à PointedEars.
Notez que cela ne fonctionne pas dans IE 10 lorsque vous essayez d'accéder à une url dans un domaine différent de celui de la page.
@BornToCode vous devriez enquêter davantage et éventuellement ouvrir un bug sur le jQuery issue tracker dans ce cas.
Je sais que certaines personnes veulent écrire du Javascript pur. Je comprends cela. Je n'ai aucun problème à ce que les gens fassent cela dans leurs projets. Mon "En jQuery :" devrait être interprété comme "Je sais que vous m'avez demandé comment le faire en Javascript, mais laissez-moi vous montrer comment le faire avec jQuery, afin que votre curiosité soit piquée en voyant le genre de concision et de clarté syntaxique dont vous pouvez bénéficier en utilisant cette bibliothèque, qui vous offrira également de nombreux autres avantages et outils".
Beaucoup d'excellents conseils ci-dessus, mais pas très réutilisables, et trop souvent remplis d'absurdités DOM et d'autres trucs qui cachent le code facile.
Voici une classe Javascript que nous avons créée et qui est réutilisable et facile à utiliser. Actuellement, elle n'a qu'une méthode GET, mais cela fonctionne pour nous. L'ajout d'une méthode POST ne devrait pas mettre à l'épreuve les compétences de quiconque.
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 );
}
}
Pour l'utiliser, rien de plus simple :
var client = new HttpClient();
client.get('http://some/thing?with=arguments', function(response) {
// do something with response
});
Erreur UnCaughtReference, HttpClient n'est pas défini . J'obtiens cette erreur à la première ligne.
Créez une fonction else where qui contient le var client... et exécutez simplement functionName() ; return false ; dans le onClick.
Excellent ! J'avais besoin d'un script Greasemonkey pour garder une session en vie et ce snippet est parfait. Je l'ai juste enveloppé dans un setInterval
appeler.
Voici un code pour le faire directement avec JavaScript. Mais, comme indiqué précédemment, il est préférable d'utiliser une bibliothèque JavaScript. Ma préférée est jQuery.
Dans le cas ci-dessous, une page ASPX (qui sert de service REST pour les pauvres) est appelée pour renvoyer un objet JavaScript JSON.
var xmlHttp = null;
function GetCustomerInfo()
{
var CustomerNumber = document.getElementById( "TextBoxCustomerNumber" ).value;
var Url = "GetCustomerInfoAsJson.aspx?number=" + CustomerNumber;
xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = ProcessRequest;
xmlHttp.open( "GET", Url, true );
xmlHttp.send( null );
}
function ProcessRequest()
{
if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 )
{
if ( xmlHttp.responseText == "Not found" )
{
document.getElementById( "TextBoxCustomerName" ).value = "Not found";
document.getElementById( "TextBoxCustomerAddress" ).value = "";
}
else
{
var info = eval ( "(" + xmlHttp.responseText + ")" );
// No parsing necessary with JSON!
document.getElementById( "TextBoxCustomerName" ).value = info.jsonData[ 0 ].cmname;
document.getElementById( "TextBoxCustomerAddress" ).value = info.jsonData[ 0 ].cmaddr1;
}
}
}
Puisque cette réponse est l'un des premiers résultats de la recherche "http request javascript", il est utile de mentionner que l'exécution d'eval sur les données de réponse comme cela est considéré comme une mauvaise pratique.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
15 votes
Notez que cela est soumis à la politique de la même origine. fr.wikipedia.org/wiki/Same_origin_policy