JQuery не AJAX POST - PullRequest
       7

JQuery не AJAX POST

31 голосов
/ 02 апреля 2011

Есть ли в jQuery простой не-AJAX метод POST?

Я ищу что-то эквивалентное форме на странице, в которой ничего, кроме скрытых полей, установленных через JavaScript, который затем получает POST-ed, вызываябраузер для загрузки набора страниц через action.Просто обычный POST, но со значениями, установленными через jQuery.

Полагаю, я мог бы продолжить реализацию моего текущего метода, но мне любопытно, если jQuery предоставляет быстрый способ.В фоновом режиме я предполагаю, что он будет динамически создавать эту форму со всеми скрытыми значениями и отправлять ее.

Ответы [ 5 ]

38 голосов
/ 02 апреля 2011

Нет ничего встроенного.Вы можете создать динамическую форму, заполнив ее скрытыми полями, добавить ее в 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' },
]);
37 голосов
/ 18 декабря 2012

Небольшое отличное решение Tidied 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();
}

Это JSLint-совместимый и гарантирует, что форма в конце тега тела не отображается, несмотря на возможные определения CSS.Использование также немного проще, например:

myFunction('/path/to/my/site/', 'post', {
    id: 1,
    quote: 'Quidquid Latine dictum sit altum videtur'
});
7 голосов
/ 11 сентября 2013

Я нашел эти ответы очень полезными и изменил решение 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();
}
2 голосов
/ 09 апреля 2015

Автор запросил решение 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. */
});
0 голосов
/ 02 апреля 2011

Я думаю, вы можете использовать что-то вроде:

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»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...