首页 文章

使用JavaScript / jQuery在重定向上发送POST数据? [重复]

提问于
浏览
180

这个问题在这里已有答案:

基本上我想要做的是在我更改 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/ ,同时将用户同时发送到同一页面 .


For future reference, I ended up doing the following

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();

}

11 回答

  • 187

    构造并填写隐藏的 method=POST action="http://example.com/vote" 表单并提交,而不是使用 window.location .

  • 6

    根据@ 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();
    
  • 0

    这是一个简单的小函数,只要你使用jQuery就可以在任何地方应用 .

    var redirect = 'http://www.website.com/page?id=23231';
    $.redirectPost(redirect, {x: 'example', y: 'abc'});
    
    // jquery extend function
    $.extend(
    {
        redirectPost: function(location, args)
        {
            var form = '';
            $.each( args, function( key, value ) {
                value = value.split('"').join('\"')
                form += '<input type="hidden" name="'+key+'" value="'+value+'">';
            });
            $('<form action="' + location + '" method="POST">' + form + '</form>').appendTo($(document.body)).submit();
        }
    });
    
  • -5

    如果您使用的是jQuery,那么redirect plugin可以使用POST或GET方法 . 它创建一个带有隐藏输入的表单并为您提交 . 如何使其工作的一个例子:

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

    Note: 您可以将方法类型GET或POST作为可选的第三个参数传递; POST是默认值 .

  • 13

    这是一个不使用jQuery的方法 . 我用它来创建一个bookmarklet,它检查w3-html-validator上的当前页面 .

    var f = document.createElement('form');
    f.action='http://validator.w3.org/check';
    f.method='POST';
    f.target='_blank';
    
    var i=document.createElement('input');
    i.type='hidden';
    i.name='fragment';
    i.value='<!DOCTYPE html>'+document.documentElement.outerHTML;
    f.appendChild(i);
    
    document.body.appendChild(f);
    f.submit();
    
  • 41

    这里的答案可能令人困惑,所以我会给你一个我正在使用的示例代码 .

    首先请注意,您所指的java脚本windows.location函数没有POST参数 .

    所以你必须......

    • 使用POST参数动态创建表单 .

    • 动态地将带有所需值的文本框或文本框发布到帖子中

    • 调用动态创建的提交表单 .

    并举例说明 .

    //---------- make sure to link to your jQuery library ----//
    
    <script type="text/javascript" >
    
        var form = $(document.createElement('form'));
        $(form).attr("action", "test2.php");
        $(form).attr("method", "POST");
        $(form).css("display", "none");
    
        var input_employee_name = $("<input>")
        .attr("type", "text")
        .attr("name", "employee_name")
        .val("Peter" );
        $(form).append($(input_employee_name));
    
    
        var input_salary = $("<input>")
        .attr("type", "text")
        .attr("name", "salary")
        .val("1000" );
        $(form).append($(input_salary));
    
        form.appendTo( document.body );
        $(form).submit();
    
    </script>
    

    如果一切顺利,您将被重定向到test2.php并且您可以使用POST来读取employee_name和salary的传递值;这将分别是彼得和1000 .

    在test2.php上,您可以获得您的值 .

    $employee_name = $_POST['employee_name'];
    $salary = $_POST['salary'];
    

    不用说,确保您清理传递的值 .

  • 7

    将任何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();
    }
    
  • 22

    这非常方便使用:

    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");
    
  • 1
    var myRedirect = function(redirectUrl) {
    var form = $('<form action="' + redirectUrl + '" method="post">' +
    '<input type="hidden" name="parameter1" value="sample" />' +
    '<input type="hidden" name="parameter2" value="Sample data 2" />' +
    '</form>');
    $('body').append(form);
    $(form).submit();
    };
    

    找到代码http://www.prowebguru.com/2013/10/send-post-data-while-redirecting-with-jquery/

    要为我的工作尝试这个和其他建议 .

    有没有其他方法可以做同样的事情?

  • 9

    您可以使用 target 属性从iframe发送带有重定向的表单 . 您的表单打开标记将是这样的:

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

    SOLUTION NO. 1

    //your variable
        var data = "brightcherry";
    
        //passing the variable into the window.location URL
        window.location.replace("/newpage/page.php?id='"+product_id+"'");
    

    SOLUTION NO. 2

    //your variable
    var data = "brightcherry";
    
    //passing the variable into the window.location URL
    window.location.replace("/newpage/page.php?id=" + product_id);
    

    details

相关问题