jQuery非AJAX POST

jQuery非AJAX POST,jquery,jquery-plugins,http-post,Jquery,Jquery Plugins,Http Post,jQuery中是否有一个简单的非AJAX POST方法 我正在寻找一种类似于页面上的表单的东西,该表单通过JavaScript设置了隐藏字段,然后通过action加载页面集。只是一篇普通的文章,但是通过jQuery设置了值 我想我可以继续实现我当前的方法,但我很好奇jQuery是否提供了一种快速的方法。在后台,我想象它会用所有隐藏的值动态创建这个表单并提交它。没有内置内容。您可以创建一个动态表单,用隐藏字段填充它,将它添加到DOM中并触发提交。下面是一个例子: function submit(a

jQuery中是否有一个简单的非AJAX POST方法

我正在寻找一种类似于页面上的表单的东西,该表单通过JavaScript设置了隐藏字段,然后通过
action
加载页面集。只是一篇普通的文章,但是通过jQuery设置了值


我想我可以继续实现我当前的方法,但我很好奇jQuery是否提供了一种快速的方法。在后台,我想象它会用所有隐藏的值动态创建这个表单并提交它。

没有内置内容。您可以创建一个动态表单,用隐藏字段填充它,将它添加到DOM中并触发提交。下面是一个例子:

function submit(action, method, values) {
    var form = $('<form/>', {
        action: action,
        method: method
    });
    $.each(values, function() {
        form.append($('<input/>', {
            type: 'hidden',
            name: this.name,
            value: this.value
        }));    
    });
    form.appendTo('body').submit();
}

submit('http://www.example.com', 'POST', [
    { name: 'key1', value: 'value1' },
    { name: 'key2', value: 'value2' },
    { name: 'key3', value: 'value3' },
]);
函数提交(操作、方法、值){
变量形式=$(''{
行动:行动,
方法:方法
});
$.each(值,函数(){
表格.附加($(''){
键入:“隐藏”,
姓名:this.name,
值:这个值
}));    
});
form.appendTo('body').submit();
}
提交('http://www.example.com","后",[
{name:'key1',value:'value1'},
{name:'key2',value:'value2'},
{name:'key3',value:'value3'},
]);

我认为您可以使用以下内容:

paramters = {key1: 'value1', key2: 'value2'}

jQuery.ajax({ 
   url:'/your/url', 
   data: jQuery.param(paramters),
   async:false,
   type:'POST',
   success: function(result){
       doSomethingWithYourResult(result);
   }
})

注意“asyn=false”设置稍微整理了Darin的优秀解决方案

function myFunction(action, method, input) {
    'use strict';
    var form;
    form = $('<form />', {
        action: action,
        method: method,
        style: 'display: none;'
    });
    if (typeof input !== 'undefined' && input !== null) {
        $.each(input, function (name, value) {
            $('<input />', {
                type: 'hidden',
                name: name,
                value: value
            }).appendTo(form);
        });
    }
    form.appendTo('body').submit();
}

我发现这些答案非常有用,并修改了Anssi Herranen的解决方案,使其也能正确地将数组发布到服务器端php:

function jqueryPost(action, method, input) {
    "use strict";
    var form;
    form = $('<form />', {
        action: action,
        method: method,
        style: 'display: none;'
    });
    if (typeof input !== 'undefined') {

        $.each(input, function (name, value) {

            if( typeof value === 'object' ) {

                $.each(value, function(objName, objValue) { 

                    $('<input />', {
                        type: 'hidden',
                        name: name + '[]',
                        value: objValue
                    }).appendTo(form);
                } );      
            }
            else {

                $('<input />', {
                    type: 'hidden',
                    name: name,
                    value: value
                }).appendTo(form);
            }
        });
    }
    form.appendTo('body').submit();
}
函数jqueryPost(操作、方法、输入){
“严格使用”;
var形式;
表格=$(''){
行动:行动,
方法:方法,,
样式:“显示:无;”
});
如果(输入类型!==‘未定义’){
$.each(输入、函数(名称、值){
如果(值的类型==='object'){
$.each(值,函数(objName,objValue){
$('', {
键入:“隐藏”,
名称:名称+“[]”,
值:objValue
}).附录(表格);
} );      
}
否则{
$('', {
键入:“隐藏”,
姓名:姓名,,
价值:价值
}).附录(表格);
}
});
}
form.appendTo('body').submit();
}

作者要求提供jQuery解决方案,但这可以通过普通JavaScript轻松实现:

function post (action, nameValueObj){
    var form = document.createElement("form");
    var i, input, prop;
    form.method = "post";
    form.action = action;
    for (prop in nameValueObj) { // Loop through properties: name-value pairs
        input = document.createElement("input");
        input.name = prop;
        input.value = nameValueObj[prop];
        input.type = "hidden";
        form.appendChild(input);
    }
    //document.body.appendChild(form); <-- Could be needed by some browsers?
    form.submit();
    return form;
}
// Example usage:
post("actionPage.html", {
    "field1": "hello",
    "field2": "world" 
    /* etc. */
});
功能post(操作,nameValueObj){
var form=document.createElement(“表单”);
变量i,输入,道具;
form.method=“post”;
行动=行动;
对于(nameValueObj中的prop){//遍历属性:名称-值对
输入=document.createElement(“输入”);
input.name=prop;
input.value=nameValueObj[prop];
input.type=“隐藏”;
表单。追加子项(输入);
}

//document.body.appendChild(表单);可能是@biccio的副本,这将不起作用。这仍然是AJAX,它只是在请求完成之前阻塞。@Brad它工作得很好!!!它向服务器进行同步POST调用,像一个带隐藏字段的表单一样传递你想要的所有值。函数是AJAX,但它不像AJAX,它像表单一样同步工作…@biccio,是的明白这一点,但我想要的是同时完全重新加载页面的东西。这种方法不能做到这一点。这对某些事情来说是一个很好的解决方案,但对我的应用程序来说不是。感谢这个解决方案!在我尝试在ASP.NET MVC中将删除操作标记为POST来保护它时,它非常有帮助。+1 darin,在一天的晚些时候找到了它但是仍然与我今天的要求相关!!thanks@trinth大多数有用的东西在IE中都不起作用,但是这是一个非常有用的解决方案。@ClainDsilva:同意这是有用的,但是,其他人可能想在必须找到答案之前知道注意事项themselves@trinth我看不出它在IE9中不起作用的任何原因,除非问题是在数据中的尾随逗号处。如果这是用于数据的,只需去掉尾随逗号即可。我不明白为什么这被否决。这应该是正确的答案。我希望我能先看到它,因为数组是一个问题,我在回来查看之前处理了30分钟。同意,这允许发布数组,被接受的答案不起作用。它似乎在没有将表单附加到页面上的情况下就起作用。不过,如果不附加表单,它在IE中就不起作用。
function post (action, nameValueObj){
    var form = document.createElement("form");
    var i, input, prop;
    form.method = "post";
    form.action = action;
    for (prop in nameValueObj) { // Loop through properties: name-value pairs
        input = document.createElement("input");
        input.name = prop;
        input.value = nameValueObj[prop];
        input.type = "hidden";
        form.appendChild(input);
    }
    //document.body.appendChild(form); <-- Could be needed by some browsers?
    form.submit();
    return form;
}
// Example usage:
post("actionPage.html", {
    "field1": "hello",
    "field2": "world" 
    /* etc. */
});