Передавать данные с помощью window.location.href

При использовании window.location.href я бы хотел передать данные POST на новую страницу, которую я открываю. возможно ли это с помощью JavaScript и jQuery?

Ответ 1

Используя window.location.href, невозможно отправить запрос POST.

Что вам нужно сделать, это настроить тег form с полями данных в нем, установить атрибут action формы в URL и атрибут method на POST, затем вызвать submit метод в теге form.

Ответ 2

Добавьте форму в свой HTML, что-то вроде этого:

<form style="display: hidden" action="/the/url" method="POST" id="form">
  <input type="hidden" id="var1" name="var1" value=""/>
  <input type="hidden" id="var2" name="var2" value=""/>
</form>

и используйте JQuery для заполнения этих значений (конечно, вы также можете использовать javascript для создания чего-то подобного)

$("#var1").val(value1);
$("#var2").val(value2);

Затем, наконец, отправьте форму

$("#form").submit();

на стороне сервера вы сможете получить данные, которые вы отправили, проверив var1 и var2, как это сделать, зависит от того, какой серверный язык вы используете.

Ответ 3

Короткий ответ: нет. window.location.href не может передавать данные POST.

Несколько более удовлетворительный ответ: вы можете использовать эту функцию для клонирования всех ваших данных формы и отправки ее.

var submitMe = document.createElement("form");
submitMe.action = "YOUR_URL_HERE"; // Remember to change me
submitMe.method = "post";
submitMe.enctype = "multipart/form-data";
var nameJoiner = "_";
// ^ The string used to join form name and input name
//   so that you can differentiate between forms when
//   processing the data server-side.
submitMe.importFields = function(form){
    for(k in form.elements){
        if(input = form.elements[k]){
            if(input.type!="submit"&&
                     (input.nodeName=="INPUT"
                    ||input.nodeName=="TEXTAREA"
                    ||input.nodeName=="BUTTON"
                    ||input.nodeName=="SELECT")
                     ){
                var output = input.cloneNode(true);
                output.name = form.name + nameJoiner + input.name;
                this.appendChild(output);
            }
        }
    }
}
  • Сделайте submitMe.importFields(form_element); для каждой из трех форм, которые вы хотите отправить.
  • Эта функция добавит имя каждой формы к именам ее дочерних входов (если у вас есть <input name="email"> в <form name="login">, представленное имя будет login_name.
  • Вы можете изменить переменную nameJoiner на нечто, отличное от _, чтобы оно не противоречило вашей схеме именования ввода.
  • После того как вы импортировали все необходимые формы, сделайте submitMe.submit();

Ответ 4

Используйте этот файл: "jquery.redirect.js"

$("#btn_id").click(function(){
    $.redirect(http://localhost/test/test1.php,
        {
            user_name: "khan",
            city : "Meerut",
            country : "country"
        });
    });
});

см. https://github.com/mgalante/jquery.redirect

Ответ 5

Как было сказано в других ответах, нет способа сделать запрос POST, используя window.location.href, для этого вы можете создать форму и сразу же отправить ее.

Вы можете использовать эту функцию:

function postForm(path, params, method) {
    method = method || 'post';

    var form = document.createElement('form');
    form.setAttribute('method', method);
    form.setAttribute('action', path);

    for (var key in params) {
        if (params.hasOwnProperty(key)) {
            var hiddenField = document.createElement('input');
            hiddenField.setAttribute('type', 'hidden');
            hiddenField.setAttribute('name', key);
            hiddenField.setAttribute('value', params[key]);

            form.appendChild(hiddenField);
        }
    }

    document.body.appendChild(form);
    form.submit();
}

postForm('mysite.com/form', {arg1: 'value1', arg2: 'value2'});

fooobar.com/questions/1147/...

Ответ 6

это так просто, как это $.post( "som_page.php", { data1: value1 , data2: value2 .... } ).done(function( data ) { $( "body" ).html(data);});
Мне пришлось решить эту проблему, чтобы сделать экранную блокировку моего приложения, где мне пришлось передавать конфиденциальные данные в качестве пользователя и URL-адрес, где он работал. Затем создайте функцию, выполняющую этот код

Ответ 7

Рассматривали ли вы просто использование Local/Session Storage? или в зависимости от сложности того, что вы строите; Вы могли бы даже использовать indexDB.

нота:

Local storage и indexDB не являются безопасными, поэтому вы не должны хранить какие-либо конфиденциальные/личные данные (например, имена, адреса, адреса электронной почты, DOB и т.д.) В любом из них.

Session Storage - это более безопасный вариант для чего-либо чувствительного, оно доступно только источнику, который устанавливает элементы, а также очищается, как только браузер/вкладка закрывается.

IndexDB немного более [но не намного] сложнее и представляет собой 30MB noSQL database встроенную в каждый браузер (но может быть практически неограниченной, если пользователь включит ее) → в следующий раз, когда вы будете использовать Google docs, откройте DevTools → приложение → IndexDB и взять пик. [spoiler alert: оно зашифровано].

Ориентация на Local и Session Storage; они оба очень просты в использовании:

// To Set 
sessionStorage.setItem( 'key' , 'value' );

// e.g.
sessionStorage.setItem( 'formData' , { name: "Mr Manager", company: "Bluth Frozen Bananas", ...  } );    

// Get The Data 
const fromData = sessionStorage.getItem( 'key' );     

// e.g. (after navigating to next location)
const fromData = sessionStorage.getItem( 'formData' );

// Remove 
sessionStorage.removeItem( 'key' );

// Remove _all_ saved data sessionStorage
sessionStorage.clear( ); 

Если просто не ваша вещь - или - может быть, вы хотите уйти с дороги и попробовать другой подход все вместе → вы, вероятно, можете использовать shared web worker... вы знаете, просто для удовольствия.

Ответ 8

Вы можете использовать GET вместо прохода, но не используйте этот метод для важных значений,

function passIDto(IDval){    
window.location.href = "CustomerBasket.php?oridd=" +  IDval ;
}   

В CustomerBasket.php

<?php
  $value = $_GET["oridd"];
  echo  $value;
?>