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

its*_*dok 34 javascript jquery jquery-plugins

这种情况之一我觉得我错过了一个关键的关键词来找到谷歌的答案......

我有一包参数,我想让浏览器导航到带参数的GET URL.作为一个jQuery用户,我知道如果我想发一个ajax请求,我会这样做:

$.getJSON(url, params, fn_handle_result);
Run Code Online (Sandbox Code Playgroud)

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

现在,我知道我可以循环参数并手动构建GET URL.对于POST,我可以动态创建表单,用字段填充并提交.但是我确定有人已经编写了一个插件来执行此操作.或许我错过了一些东西,你可以用核心jQuery来做.

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

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

$.goTo(url, params);
Run Code Online (Sandbox Code Playgroud)

并且可选

$.goTo(url, params, "POST");
Run Code Online (Sandbox Code Playgroud)

Dus*_*tin 50

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);
Run Code Online (Sandbox Code Playgroud)

  • 注意:Dustin指的jQuery插件是由itsadok(见下文).起初这让我很困惑.;-) (3认同)

its*_*dok 20

这是我最终做的,使用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);
Run Code Online (Sandbox Code Playgroud)

用法:

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

任何反馈都会受到欢迎.

更新:请参阅dustin的答案,了解适用于IE8的版本


red*_*are 12

从问题中不清楚你是否想要在查询字符串上传递一组随机值,​​或者它是否为表单值.

对于表单值,只需使用.serialize函数来构造查询字符串.

例如

var qString = $('#formid').serialize();
document.location = 'someUrl' + '?' + serializedForm
Run Code Online (Sandbox Code Playgroud)

如果您有一组随机值,​​则可以构造一个对象并使用.param实用程序方法.

例如

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