更新$ _POST并通过jquery传递给php而不提交

时间:2016-07-21 21:17:43

标签: php jquery html post

警告:提交可能会非常简单,但是因为其他人的#%^ $!&代码,每次提交都会清除页面上所有表单上的所有数据,所以我不能使用.submit()

这是我想要做的事情:

第1步:页面上的链接通过Javascript打开弹出窗口。弹出窗口有一些填写它的字段,并使用window.opener.getElementById(' hiddenX')。值,然后更新原始页面上的各种隐藏的html元素,并关闭弹出窗口。 / p>

第2步:在卸载弹出窗口时,通过Javascript修改html元素。

第3步:将更新的html元素添加回页面上的$ _POST

步骤4:一些php代码使用$ _POST中的值以及早期php代码生成的值来运行php函数来创建和发送电子邮件。

我认为我不能通过GET样式的url传递值,因为某些值是非常长的文本字符串,而tehre也可能是某些数组。我尝试使用.post(window.location,{val1:" 1stvalue"})与包含来自步骤4的php代码的div上的.load()组合。我认为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>

1 个答案:

答案 0 :(得分:0)

我通过将电子邮件功能和php div移动到一个名为sub2.php的单独的php页面,然后通过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!");
                            }
                        });

这实际上并没有解决最初的问题,但它同样有效。 如果有人有更好的解决方案,我很高兴知道它是什么