用JavaScript / jQuery重定向發送POST數據?


Answers

per @ Kevin-Reid的答案,這裡是“我最終做了下面的例子”,避免需要命名,然後通過專門構建表單(使用jQuery)來再次查找表單對象。

var url = 'http://example.com/vote/' + Username;
var form = $('<form action="' + url + '" method="post">' +
  '<input type="text" name="api_url" value="' + Return_URL + '" />' +
  '</form>');
$('body').append(form);
form.submit();
Question

這個問題在這裡已經有了答案:

基本上我想要做的是在更改window.location時發送POST數據,就好像用戶已經提交了一個表單並且它轉到了新頁面一樣。 我需要這樣做,因為我需要傳遞一個隱藏的URL,並且我不能簡單地將它作為GET放在URL中,這是出於美觀的原因。

這是我目前所擁有的,但它不會發送任何POST數據。

if(user has not voted) {

    window.location = 'http://example.com/vote/' + Username;

}

我知道你可以使用jQuery.post()發送POST數據,但是我需要使用新的window.location發送它。

因此,回顧一下,我需要通過POSTapi_url值發送到http://example.com/vote/ ,同時將用戶發送到同一頁面。

為了將來的參考,我最終做了以下工作

if(user has not voted) {

    $('#inset_form').html('<form action="http://example.com/vote/' + Username + '" name="vote" method="post" style="display:none;"><input type="text" name="api_url" value="' + Return_URL + '" /></form>');

    document.forms['vote'].submit();

}



您可以使用target屬性來發送來自iframe的重定向表單。 你的表單打開標籤是這樣的:

method="post" action="http://some.url.com/form_action" target="_top"



這非常方便使用:

var myRedirect = function(redirectUrl, arg, value) {
  var form = $('<form action="' + redirectUrl + '" method="post">' +
  '<input type="hidden" name="'+ arg +'" value="' + value + '"></input>' + '</form>');
  $('body').append(form);
  $(form).submit();
};

然後像這樣使用它:

myRedirect("/yourRedirectingUrl", "arg", "argValue");



如果您使用的是jQuery,則會有一個可以與POST或GET方法配合使用的重定向插件 。 它會創建一個隱藏輸入的表單並提交給您。 一個如何讓它工作的例子:

$.redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'});

注意:您可以將方法類型GET或POST作為可選的第三個參數傳遞; POST是默認值。




通用函數將任何JavaScript對象發佈到給定的URL。

function postAndRedirect(url, postData)
{
    var postFormStr = "<form method='POST' action='" + url + "'>\n";

    for (var key in postData)
    {
        if (postData.hasOwnProperty(key))
        {
            postFormStr += "<input type='hidden' name='" + key + "' value='" + postData[key] + "'></input>";
        }
    }

    postFormStr += "</form>";

    var formElement = $(postFormStr);

    $('body').append(formElement);
    $(formElement).submit();
}



Links