【问题标题】:updating $_POST and passing to php via jquery without submit更新 $_POST 并通过 jquery 传递给 php 而无需提交
【发布时间】:2016-07-21 21:17:43
【问题描述】:

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

这就是我想要做的:

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

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

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

第 4 步:一段 php 代码运行一个 php 函数,使用来自 $_POST 的值以及早期 php 代码产生的值来创建和发送电子邮件。

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


    【解决方案1】:

    我通过将电子邮件函数和 php div 移动到一个单独的 php 页面(称为 sub2.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!");
                                }
                            });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2018-02-26
      相关资源
      最近更新 更多