caveat: это, вероятно, будет довольно простым с помощью submit, но из-за чужого #% ^ $! & кода каждый отправитель очищает все данные по всем формам на странице, поэтому я не могу использовать .submit ()
вот что я пытаюсь сделать:
Шаг 1: ссылка на странице, через Javascript, открывает всплывающее окно. что popup имеет некоторые поля, которые вы заполняете, и используя значение window.opener.getElementById ('hiddenX')., различные скрытые элементы html на исходной странице затем обновляются, а всплывающее окно закрывается.
Шаг 2: при выгрузке всплывающего окна элементы html изменяются с помощью Javascript.
Шаг 3: обновленные элементы html добавляются обратно на страницу $ _POST на странице
Шаг 4: бит php-кода запускает php-функцию, используя значения из $ _POST, а также значения, полученные более ранним php-кодом для создания и отправки электронной почты.
Я не думаю, что могу передавать значения с помощью URL-адреса GET, так как некоторые из значений являются очень длинными текстовыми строками, а тере, вероятно, будут некоторые массивы. Я попытался использовать .post (window.location, {val1: "1stvalue"}) в сочетании с .load () в div, содержащем php-код с шага 4. Я думаю, что обновления div, но значение POST остается пустым , есть идеи?
сценарий:
$(".email1").on('click', function (event) { var win1 = window.open("../sub1.php","_blank","height=450,width=510, status=yes,toolbar=no,menubar=no,location=no"); $(win1).on('unload', function (event){ if(document.getElementById('hidden1').value != "z"){ $tosend2 = document.getElementById('hidden3').value; ...... // various changes to $tosend2 and other elements on the page $.post( window.location, { hidden3 : "abc" }); //temporarily use "abc" instead of $tosend2 $( "#emaildiv" ).load(location.href+" #emaildiv2>*","" ); } }); });
html / php:
<div style="display : hidden" name="emaildiv" id="emaildiv"> <input type="hidden" name="hidden1" id="hidden1" value="z" /> <input type="hidden" name="hidden3" id="hidden3" value="z" /> </div> <div style="display : hidden" name="emaildiv2" id="emaildiv2"> <?php echo "<div class='error'> what is the val?: " . $_POST['hidden1'] . " </code></div>"; if( !empty($_POST['hidden1']) ){ if( $_POST['hidden1'] != "z" ){ echo "<div class='error'> what is it now?: " . $_POST['hidden1'] . " </code></div>"; //emailstuff($locnlist, $_POST['hidden1'], $_POST['hidden3']); //echo "email sent"; } } ?> </div>
Я решил это, переместив функцию электронной почты и php div на отдельную php-страницу под названием sub2.php, а затем отправив значения post на эту страницу через ajax
$.ajax({ type: 'post', url: '/routing/sub2.php' , data: { hidden1 : document.getElementById('hidden1').value , hidden2 : document.getElementById('hidden2').value , hidden4 : document.getElementById('hidden4').value , locnlist : loclist }, success: function () { alert("Email has been sent!"); } });
это фактически не решает начальную проблему, но она работает так же хорошо. если у кого-то есть лучшее решение, я был бы очень рад узнать, что это такое