Non-ajax ПОЛУЧАЮТ/POST использование jQuery (плагин?)

Вы ничего не делаете неправильно! Вы изменили каталог, но только в подоболочке, которая выполняет сценарий.

можно выполнить сценарий в текущем процессе с "точечной" командой:

. proj

, Но я предпочел бы, чтобы предложение Greg использовало псевдоним в этом простом случае.

34
задан itsadok 19 July 2009 в 09:56
поделиться

5 ответов

Плагин 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);
50
ответ дан 27 November 2019 в 16:23
поделиться

Принятый ответ, похоже, не покрывает ваши требования POST, поскольку установка document.location всегда приводит к в запросе GET. Вот возможное решение, хотя я не уверен, что jQuery позволяет загружать все содержимое страницы следующим образом:

$.post(url, params, function(data) {
  $(document).html(data);
}, "html");
-5
ответ дан 27 November 2019 в 16:23
поделиться

Вот что я в итоге сделал, воспользовавшись советом от 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

20
ответ дан 27 November 2019 в 16:23
поделиться

Из вопроса неясно, есть ли у вас случайный набор значений, которые вы хотите передать в строку запроса, или это значения формы.

Для значений формы просто используйте .serialize функция для создания строки запроса.

например

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
12
ответ дан 27 November 2019 в 16:23
поделиться

Молодец, итсадок! Если вы хотите, чтобы невидимая форма поместила ее в скрытый 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);
0
ответ дан 27 November 2019 в 16:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: