34 votes

GET/POST non-ajax avec jQuery (plugin ?)

C'est l'une de ces situations où j'ai l'impression qu'il me manque un mot-clé crucial pour trouver la réponse sur Google...

J'ai un ensemble de paramètres et je veux que le navigateur navigue vers une URL GET avec les paramètres. En tant qu'utilisateur de jQuery, je sais que si je voulais faire une requête ajax, je ferais simplement :

$.getJSON(url, params, fn_handle_result);

Mais parfois, je ne veux pas utiliser ajax. Je veux juste soumettre les paramètres et obtenir une page en retour.

Maintenant, je sais que je peux boucler les paramètres et construire manuellement une URL GET. Pour POST, je peux créer dynamiquement un formulaire, le remplir avec des champs et le soumettre. Mais je suis sûr que quelqu'un a déjà écrit un plugin qui fait cela. Ou peut-être que j'ai raté quelque chose et que vous pouvez le faire avec le noyau de jQuery.

Quelqu'un connaît-il un tel plugin ?

EDIT : En fait, ce que je veux, c'est écrire :

$.goTo(url, params);

Et éventuellement

$.goTo(url, params, "POST");

1voto

zlsmith86 Points 127

Ceci est similaire à ce qui précède, sauf qu'il gérera les paramètres Array passés à MVC

(function($) {
    $.extend({
        getGo: function(url, params, traditional) {
            /// <summary>
            ///     Perform a GET at url with specified params passed as part of the query string.
            /// </summary>
            /// <param name="url"></param>
            /// <param name="params"></param>
            /// <param name="traditional">Boolean:  Specify true for traditional serialization.</param>
            document.location = url + '?' + $.param(params, traditional);
        },
        postGo: function (url, params) {
            /// <summary>
            ///     Perform a POST at url with the specified params as part of a form object.
            ///     If a parameter is an array then it will submit it as multiple attributes so MVC will see it as an array
            /// </summary>
            /// <param name="url" type="string"></param>
            /// <param name="params" type="Object"></param>
            var $form = $("<form>").attr("method", "post").attr("action", url);
            $.each(params, function (name, value) {
                if (value.length != null && value.length > 0) {
                    for (var i = 0; i < value.length; i++) {
                        $("<input type='hidden'>").attr("name", name + '[' + i + ']').attr("value", value[i]).appendTo($form);
                    }
                }
                else {
                    $("<input type='hidden'>").attr("name", name).attr("value", value).appendTo($form);
                }
            });
            $form.appendTo("body");
            $form.submit();
        }
    });
})(jQuery);

0voto

piper Points 1

Bon travail itsadok ! Si vous voulez un formulaire invisible, mettez-le dans la DIV cachée :

(function($) {
    $.extend({
        doGet: function(url, params) {
            document.location = url + '?' + $.param(params);
        },
        doPost: function(url, params) {
            var $div = $("<div>").css("display", "none");
            var $form = $("<form method='POST'>").attr("action", url);
            $.each(params, function(name, value) {
                $("<input type='hidden'>")
                    .attr("name", name)
                    .attr("value", value)
                    .appendTo($form);
            });
            $form.appendTo($div);
            $div.appendTo("body");
            $form.submit();
        }
    });
})(jQuery);

-5voto

toluju Points 2555

La réponse acceptée ne semble pas couvrir votre besoin POST, car la définition de document.location entraînera toujours une requête GET. Voici une solution possible, bien que je ne sois pas sûr que jQuery permette de charger tout le contenu de la page de cette manière :

$.post(url, params, function(data) {
  $(document).html(data);
}, "html");

Prograide.com

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.

Powered by:

X