jQuery非AJAX POST

Bra*_*rad 31 jquery http-post jquery-plugins

在jQuery中有一个简单的非AJAX POST方法吗?

我正在寻找一个与页面上的表单相当的东西,只有通过JavaScript设置的隐藏字段,然后获得POST,导致浏览器加载页面集action.只是一个正常的POST,但通过jQuery设置值.

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

Dar*_*rov 38

内置任何东西都没有.您可以创建一个动态表单,用隐藏字段填充它,将其添加到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' },
]);
Run Code Online (Sandbox Code Playgroud)


Ans*_*nen 37

整理达林的优秀解决方案.

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

这是JSLint兼容的,并确保尽管可能有css定义,但在body标签的末尾没有显示任何表单.用法也稍微简单明了,例如:

myFunction('/path/to/my/site/', 'post', {
    id: 1,
    quote: 'Quidquid Latine dictum sit altum videtur'
});
Run Code Online (Sandbox Code Playgroud)

  • 没关系,如果你不附加它,它在IE中不起作用. (4认同)

小智 7

我发现这些答案非常有用,并修改了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();
}
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这被投了票.这应该是正确的答案.我希望我能先看到它,因为阵列是我处理了30分钟的问题,然后回来看看. (2认同)