JavaScript requête post comme la soumission d'un formulaire
Je suis en train de diriger un navigateur vers une autre page. Si je voulais une requête GET, je pourrais dire
document.location.href = 'http://example.com/q=a';
Mais la ressource, je suis en train de l'accès ne répondent pas correctement à moins que j'utilise une requête POST. Si ce n'étaient pas générées de façon dynamique, je pourrais utiliser le HTML
<form action="http://example.com/" method="POST">
<input type="hidden" name="q" value="a">
</form>
Ensuite, je voudrais juste envoyer le formulaire à partir du DOM.
Mais vraiment, je voudrais un code JavaScript qui me permet de dire
post_to_url('http://example.com/', {'q':'a'});
Quel est le meilleur navigateur croix de la mise en œuvre?
Modifier
Je suis désolé je n'étais pas clair. J'ai besoin d'une solution qui modifie l'emplacement du navigateur, tout comme la soumission d'un formulaire. Si cela est possible avec XMLHttpRequest, il n'est pas évident. Et cela ne devrait pas être asynchrone, ni d'utiliser le format XML, donc, Ajax n'est pas la réponse.
- Comme mentionné dans un autre thread, il y a un jquery ".rediriger" plugin qui fonctionne avec la méthode POST ou GET. Il crée un formulaire avec des entrées et le soumet pour vous. Ex: $.redirect('demo.php', {'arg1': 'valeur1', 'arg2': 'valeur2'}); github.com/mgalante/jquery.redirect/blob/master/...
Vous devez vous connecter pour publier un commentaire.
Créer dynamiquement
<input>
s dans un formulaire et de le soumettreExemple:
MODIFIER: Depuis cela a obtenu upvoted tellement, je devine que les gens seront en copier-coller ce beaucoup. J'ai donc ajouté le
hasOwnProperty
vérifier pour corriger toute erreur commise par inadvertance bugs.document.forms
var tabWindowId = window.open('about:blank', '_blank'); var form = tabWindowId.document.createElement("form"); tabWindowId.document.body.appendChild(form);
var form = document.createElement("form");
Il est possible de l'ajouter à la déjà existant méthode POST?Ce serait une version de la réponse sélectionnée à l'aide de jQuery.
$("<form method='POST' action='https://example.com'><input type='hidden' name='q' value='a'/></form>").appendTo("body").submit();
Un simple rapide et sale de la mise en œuvre de @Aaron réponse:
De sûr, vous devriez plutôt utiliser un framework JavaScript comme Prototype ou jQuery...
À l'aide de la
createElement
fonction fournie dans cette réponse, ce qui est nécessaire en raison de IE brisé avec le nom de l'attribut sur les éléments créés normalement avecdocument.createElement
:Rakesh Pai réponse est étonnant, mais il y a un problème qui se produit pour moi (dans Safari) quand j'essaie de poster un formulaire avec un champ appelé
submit
. Par exemple,post_to_url("http://google.com/",{ submit: "submit" } );
. Je l'ai patché la fonction légèrement à marcher autour de cette variable espace de collision.Pas. Vous ne pouvez pas avoir le JavaScript requête post comme la soumission d'un formulaire.
Ce que vous pouvez avoir est un formulaire en HTML, puis de le soumettre avec le JavaScript. (comme il est expliqué à de nombreuses reprises sur cette page).
Vous pouvez créer le code HTML vous-même, vous n'avez pas besoin de JavaScript pour écrire le HTML. Ce serait ridicule si les gens ont suggéré que.
Votre fonction, il suffit de configurer le formulaire de la façon dont vous le souhaitez.
Puis, l'utiliser comme.
Mais je voudrais juste quitter la fonction et juste le faire.
Enfin, le style de décision va dans le ccs fichier.
Personnellement, je pense que les formulaires doivent être adressés par leur nom, mais ce n'est pas important maintenant.
Si vous avez Prototype installé, vous pouvez serrer le code pour générer et envoyer le formulaire masqué comme ceci:
c'est la réponse de rakesh, mais avec un support pour les tableaux (ce qui est assez fréquent dans les formes):
plaine javascript:
oh, et voici la version jquery: (code légèrement différent, mais se résume à la même chose)
Une solution consiste à générer le formulaire et le soumettre. Une mise en œuvre est
Afin que je puisse mettre en œuvre un raccourcissement d'URL bookmarklet avec un simple
Bien, j'avais lu tous les autres postes, donc je ne perds pas de temps à créer cette de Rakesh Pai de réponse. Voici une solution récursive qui fonctionne avec les tableaux et les objets. Pas de dépendance à jQuery.
Ajouté un segment de gérer les cas où le formulaire doit être présenté comme un tableau. (ie. où il n'y a aucun objet wrapper autour d'une liste d'éléments)
Trois options ici.
JavaScript Standard réponse: Utiliser un cadre! La plupart des frameworks Ajax sera prélevée vous un moyen facile de faire un XMLHTTPRequest POST.
Faire le XMLHTTPRequest demande vous-même, en passant poste dans la méthode ouverte au lieu de les obtenir. (Plus d'informations dans À l'aide de la méthode POST dans XMLHTTPRequest (Ajax).)
Via JavaScript, créer dynamiquement un formulaire, ajouter une action, d'ajouter des entrées, et de le soumettre.
J'aimerais aller en bas de l'Ajax route que d'autres ont suggéré avec quelque chose comme:
Voici comment je l'ai écrit à l'aide de jQuery. Testé sous Firefox et Internet Explorer.
La façon la plus simple est l'utilisation d'Ajax Requête Post:
où:
json, script, texte, html)
Ensuite dans le gestionnaire de succès rediriger le navigateur avec quelque chose comme de la fenêtre.emplacement.
La Prototype bibliothèque comprend une table de hachage de l'objet, avec un ".toQueryString()" la méthode, ce qui vous permet de transformer facilement un objet JavaScript/structure dans une chaîne de requête chaîne de style. Depuis le poste nécessite le "corps" de la demande à une chaîne de requête chaîne formatée, cela permet à votre requête Ajax fonctionne correctement comme un poste. Voici un exemple d'utilisation du Prototype:
Cela fonctionne parfaitement dans mon cas:
Vous pouvez l'utiliser dans la fonction comme:
À l'aide de ce que vous pouvez poster toutes les valeurs des entrées.
FormObject est une option. Mais FormObject n'est pas supporté par la plupart des navigateurs maintenant.
Encore un autre récursive solution, car certains d'autres semblent être cassé (je n'ai pas tous les tester). Celui-ci dépend lodash 3.x et ES6 (jQuery non obligatoire):
Ma solution pour encoder profondément imbriqués les objets, contrairement à la actuellement à la solution retenue par @RakeshPai.
Il utilise la "qs' mnp de la bibliothèque et de ses stringify de la fonction de convertir des objets imbriqués dans les paramètres.
Ce code fonctionne bien avec un Rails de back-end, bien que vous devriez être en mesure de le modifier à travailler avec ce backend vous avez besoin en modifiant les options passées à stringify. Rails exige que arrayFormat être mis "entre parenthèses".
Exemple:
Produit ces Rails paramètres:
C'est comme Alan option 2 (ci-dessus). Comment instancier le httpobj est laissée en exercice.
Ceci est basé sur beauSD du code à l'aide de jQuery. Il est amélioré de sorte qu'il fonctionne de manière récursive sur les objets.
Vous pourriez ajouter dynamiquement le formulaire à l'aide du visualiseur DHTML et puis soumettez-la.
Vous pourriez utiliser une librairie comme jQuery et ses $.méthode post.
- Je utiliser le document.les formes java et fait une boucle pour obtenir tous les éléments du formulaire, puis de les envoyer via xhttp. Donc, c'est ma solution pour javascript /ajax soumettre (avec tout le code html inclus à titre d'exemple):
La méthode que j'utilise pour poster et de diriger un utilisateur automatiquement vers une autre page est à écrire une forme cachée et puis l'auto de le soumettre. Être assuré que le formulaire masqué prend absolument pas de place sur la page web. Le code pourrait être quelque chose comme ceci:
Application de l'auto soumettre
Une application d'un auto soumettre serait de diriger les valeurs d'un formulaire que l'utilisateur automatiquement la mettre sur l'autre page retour à la page précédente. Une telle application serait comme ceci:
Voici comment je le fais.
plugin jQuery pour rediriger avec des POST ou GET:
https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js
Pour tester, comprennent ci-dessus .fichier js ou de le copier/coller de la classe dans votre code, puis utiliser le code ici, en remplaçant "args" avec vos noms de variables, et les "valeurs" avec les valeurs de ces variables respectives:
Vous pourriez vous jQuery déclencher la méthode de soumettre le formulaire, tout comme vous appuyez sur un bouton, comme ça,
il soumettra sur le navigateur.
Vous pourriez faire un appel AJAX (probablement à l'aide d'une bibliothèque comme l'utilisation de Prototype.js ou JQuery). AJAX peut gérer à la fois les options GET et POST.