非Ajax GET / POST使用jQuery(插件?)

这是我觉得我错过了一个关键的关键字在Google上find答案的情况之一…

我有一袋参数,我想使浏览器导航到一个GET URL的参数。 作为一个jQuery用户,我知道,如果我想做一个Ajax请求,我只会做:

$.getJSON(url, params, fn_handle_result); 

但有时候我不想使用ajax。 我只想提交参数并返回页面。

现在,我知道我可以循环参数,并手动构build一个GET URL。 对于POST,我可以dynamic地创build一个表单,填充字段并提交。 但是我确定有人已经写了一个这样做的插件。 或者,也许我错过了一些东西,你可以用核心jQuery来做到这一点。

那么,有没有人知道这样的插件?

编辑:基本上,我想要写的是:

 $.goTo(url, params); 

并且可选地

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

jQuery插件似乎工作很好,直到我在IE8上尝试它。 我不得不做这个微小的修改,让它在IE上运行:

 (function($) { $.extend({ getGo: function(url, params) { document.location = url + '?' + $.param(params); }, postGo: function(url, params) { var $form = $("<form>") .attr("method", "post") .attr("action", url); $.each(params, function(name, value) { $("<input type='hidden'>") .attr("name", name) .attr("value", value) .appendTo($form); }); $form.appendTo("body"); $form.submit(); } }); })(jQuery); 

以下是我最终做的,使用redsquare的提示:

 (function($) { $.extend({ doGet: function(url, params) { document.location = url + '?' + $.param(params); }, doPost: function(url, params) { 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("body"); $form.submit(); } }); })(jQuery); 

用法:

 $.doPost("/mail/send.php", { subject: "test email", body: "This is a test email sent with $.doPost" }); 

任何反馈将受到欢迎。

更新:请参阅dustin的IE8版本的答案

从这个问题中不清楚你是否想要在查询string上传递一串随机值,或者它是否构成值。

对于表单值,只需使用.serialize函数来构造查询string。

例如

 var qString = $('#formid').serialize(); document.location = 'someUrl' + '?' + serializedForm 

如果你有一堆随机的值,你可以构造一个对象并使用.param工具方法。

例如

  var params = { width:1680, height:1050 }; var str = jQuery.param( params ); console.log( str ) // prints width=1680&height=1050 // document.location = 'someUrl' + '?' + str 

任何人做的doPost的轨道3,你需要添加在CSRF令牌,添加下面的答案应该这样做…

 var token = $('meta[name="csrf-token"]').attr('content'); $("<input name='authenticity_token' type='hidden' value='" + token + "'/>").appendTo($form); 

这与上面类似,除了它将处理传递给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); 

好工作itadok! 如果你想隐藏的forms把它放到隐藏的DIV:

 (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); 

接受的答案似乎不包括您的POST要求,因为设置document.location将始终导致GET请求。 这是一个可能的解决scheme,虽然我不确定jQuery允许像这样加载整个页面的内容:

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