J'essaie de diriger un navigateur vers une autre page. Si je voulais une demande GET, je pourrais dire
document.location.href = 'http://example.com/q=a';
Mais la ressource à laquelle j'essaie d'accéder ne répondra pas correctement à moins que j'utilise une demande POST. Si ce n'était pas généré dynamiquement, je pourrais utiliser le HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Ensuite, je voudrais simplement soumettre le formulaire du DOM.
Mais je voudrais vraiment du code JavaScript qui me permette de dire
post_to_url('http://example.com/', {'q':'a'});
Quelle est la meilleure implémentation multi-navigateurs?
Éditer
Je suis désolé de ne pas avoir été clair. J'ai besoin d'une solution qui modifie l'emplacement du navigateur, tout comme pour soumettre un formulaire. Si cela est possible avec XMLHttpRequest , ce n'est pas évident. Et cela ne doit pas être asynchrone, ni utiliser XML, donc Ajax n'est pas la réponse.
Réponses:
Créez dynamiquement des
<input>
s dans un formulaire et soumettez-leExemple:
EDIT : Étant donné que cela a été tellement voté, je suppose que les gens vont beaucoup copier-coller. J'ai donc ajouté la
hasOwnProperty
vérification pour corriger tout bogue par inadvertance.la source
Ce serait une version de la réponse sélectionnée utilisant jQuery .
la source
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Une implémentation simple et rapide de la réponse @Aaron:
Bien sûr, vous devriez plutôt utiliser un framework JavaScript tel que Prototype ou jQuery ...
la source
Utiliser la
createElement
fonction fournie dans cette réponse , qui est nécessaire en raison de la rupture d' Internet Explorer avec l'attribut name sur les éléments créés normalement avecdocument.createElement
:la source
La réponse de Rakesh Pai est incroyable, mais il y a un problème qui se produit pour moi (dans Safari ) lorsque j'essaie de poster un formulaire avec un champ appelé
submit
. Par exemplepost_to_url("http://google.com/",{ submit: "submit" } );
,. J'ai corrigé légèrement la fonction pour contourner cette collision à espace variable.la source
Non. Vous ne pouvez pas avoir la demande de publication JavaScript comme un formulaire soumis.
Ce que vous pouvez avoir est un formulaire en HTML, puis envoyez-le avec le JavaScript. (comme expliqué plusieurs fois sur cette page).
Vous pouvez créer le HTML vous-même, vous n'avez pas besoin de JavaScript pour écrire le HTML. Ce serait idiot si les gens le suggéraient.
Votre fonction configurerait simplement le formulaire comme vous le souhaitez.
Ensuite, utilisez-le comme.
Mais je voudrais simplement laisser de côté la fonction et le faire.
Enfin, la décision de style va dans le fichier ccs.
Personnellement, je pense que les formulaires doivent être adressés par leur nom, mais ce n'est pas important pour le moment.
la source
Si vous avez installé Prototype , vous pouvez resserrer le code pour générer et soumettre le formulaire caché comme ceci:
la source
c'est la réponse de rakesh, mais avec le support des tableaux (ce qui est assez courant dans les formulaires):
Javascript simple:
oh, et voici la version jquery: (code légèrement différent, mais se résume à la même chose)
la source
Une solution consiste à générer le formulaire et à le soumettre. Une mise en œuvre est
Je peux donc implémenter un bookmarklet de raccourcissement d'URL avec un simple
la source
Eh bien, j'aurais aimé avoir lu tous les autres messages afin de ne pas perdre de temps à créer cela à partir de la réponse de Rakesh Pai. Voici une solution récursive qui fonctionne avec des tableaux et des objets. Aucune dépendance à jQuery.
Ajout d'un segment pour gérer les cas où le formulaire entier doit être soumis comme un tableau. (c.-à-d. où il n'y a pas d'objet wrapper autour d'une liste d'éléments)
la source
Trois options ici.
Réponse JavaScript standard: utilisez un framework! La plupart des frameworks Ajax vous auront résumé un moyen facile de faire un POST XMLHTTPRequest .
Faites vous-même la demande XMLHTTPRequest, en passant post dans la méthode open au lieu de get. (Plus d'informations dans Utilisation de la méthode POST dans XMLHTTPRequest (Ajax) .)
Via JavaScript, créez dynamiquement un formulaire, ajoutez une action, ajoutez vos entrées et soumettez-le.
la source
Je descendrais la route Ajax comme d'autres l'ont suggéré avec quelque chose comme:
la source
La manière la plus simple consiste à utiliser Ajax Post Request:
où:
Ensuite, dans le gestionnaire de réussite, redirigez le navigateur avec quelque chose comme window.location.
la source
Voici comment je l'ai écrit en utilisant jQuery. Testé dans Firefox et Internet Explorer.
la source
Le prototype bibliothèque de comprend un objet Hashtable, avec une méthode ".toQueryString ()", qui vous permet de transformer facilement un objet / une structure JavaScript en une chaîne de style chaîne de requête. Étant donné que la publication requiert que le «corps» de la demande soit une chaîne au format chaîne de requête, cela permet à votre demande Ajax de fonctionner correctement en tant que publication. Voici un exemple d'utilisation de Prototype:
la source
Cela fonctionne parfaitement dans mon cas:
Vous pouvez l'utiliser en fonction comme:
En utilisant cela, vous pouvez publier toutes les valeurs des entrées.
la source
Encore une autre solution récursive , car certaines semblent cassées (je ne les ai pas toutes testées). Celui-ci dépend de lodash 3.x et ES6 (jQuery non requis):
la source
Ma solution va encoder des objets profondément imbriqués, contrairement à la solution actuellement acceptée par @RakeshPai.
Il utilise la bibliothèque npm 'qs' et sa fonction stringify pour convertir les objets imbriqués en paramètres.
Ce code fonctionne bien avec un backend Rails, bien que vous devriez pouvoir le modifier pour qu'il fonctionne avec le backend dont vous avez besoin en modifiant les options passées à stringify. Rails nécessite que arrayFormat soit défini sur "brackets".
Exemple:
Produit ces paramètres Rails:
la source
FormObject est une option. Mais FormObject n'est pas pris en charge par la plupart des navigateurs actuellement.
la source
C'est comme l'option 2 d'Alan (ci-dessus). Comment instancier le httpobj est laissé comme exercice.
la source
Ceci est basé sur le code de beauSD utilisant jQuery. Il est amélioré afin qu'il fonctionne récursivement sur les objets.
la source
Vous pouvez ajouter dynamiquement le formulaire à l'aide de DHTML, puis le soumettre.
la source
Vous pouvez utiliser une bibliothèque comme jQuery et sa méthode $ .post .
la source
J'utilise le document.forms java et le boucle pour obtenir tous les éléments du formulaire, puis envoie via xhttp. Voici donc ma solution pour javascript / ajax submit (avec tous les html inclus comme exemple):
la source
Vous pouvez utiliser la méthode de déclenchement de jQuery pour envoyer le formulaire, tout comme vous appuyez sur un bouton, comme ça,
il sera soumis sur le navigateur.
la source
La méthode que j'utilise pour publier et diriger automatiquement un utilisateur vers une autre page consiste à simplement écrire un formulaire masqué, puis à le soumettre automatiquement. Soyez assuré que le formulaire caché ne prend absolument aucun espace sur la page Web. Le code serait quelque chose comme ceci:
Demande de soumission automatique
Une application de soumission automatique dirigerait les valeurs de formulaire que l'utilisateur mettrait automatiquement sur l'autre page vers cette page. Une telle application serait comme ceci:
la source
Voici comment je le fais.
la source
Aucune des solutions ci-dessus ne gère les paramètres imbriqués profonds avec juste jQuery, voici donc ma solution à deux cents.
Si vous utilisez jQuery et que vous devez gérer des paramètres imbriqués profonds, vous pouvez utiliser cette fonction ci-dessous:
Voici un exemple d'utilisation. Le code html:
Et si vous cliquez sur le bouton de test, il affichera le formulaire et vous obtiendrez les valeurs suivantes dans POST:
Remarque: si vous souhaitez publier le formulaire dans une autre URL que la page actuelle, vous pouvez spécifier l'URL comme deuxième argument de la fonction postForm.
Ainsi, par exemple (pour réutiliser votre exemple):
J'espère que cela t'aides.
Note2: le code a été extrait du plugin de redirection . Je l'ai simplement simplifié pour mes besoins.
la source
Plugin jQuery pour redirection avec POST ou GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Pour tester, incluez le fichier .js ci-dessus ou copiez / collez la classe dans votre code, puis utilisez le code ici, en remplaçant "args" par vos noms de variable et "values" par les valeurs de ces variables respectives:
la source
Vous pouvez effectuer un appel AJAX (probablement en utilisant une bibliothèque telle que l'utilisation de Prototype.js ou JQuery). AJAX peut gérer les options GET et POST.
la source