2016-07-21 8 views
0

caveat: das wäre wahrscheinlich ziemlich einfach mit einem submit, aber wegen jemandes anderen #%^$! & Code, jeder einreichen löscht alle Daten auf allen Formen auf der Seite, also kann ich .submit nicht verwenden()

hier ist, was ich zu tun habe versucht:

Schritt 1: einen Link auf einer Seite, über Javascript, öffnet ein Popup. Dieses Popup hat einige Felder, die Sie ausfüllen, und mit window.opener.getElementById ('hiddenX'). value werden verschiedene versteckte HTML-Elemente auf der Originalseite aktualisiert und das Popup geschlossen.

Schritt 2: Beim Entladen des Popups werden die HTML-Elemente über Javascript geändert.

Schritt 3: die aktualisierte HTML-Elemente werden zurück zu $ ​​_POST auf der Seite

Schritt 4 hinzugefügt: ein bisschen PHP-Code führt eine PHP-Funktion unter Verwendung der Werte von $ _POST sowie der durch früher erzeugten Wert PHP-Code zum Erstellen und Senden einer E-Mail.

Ich glaube nicht, dass ich die Werte über eine GET-style-URL übergeben kann, da einige der Werte sehr sehr lange Textzeichenfolgen sind, und es werden wahrscheinlich auch einige Arrays sein. Ich habe versucht, .post (window.location, {val1: "1stvalue"}) in Kombination mit einem .load() auf dem div zu verwenden, das den PHP-Code von Schritt 4 enthält. Ich denke, das div aktualisiert, aber der POST-Wert bleibt leer . irgendwelche Ideen?

Skript:

$(".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> 

Antwort

0

Ich löste dies durch die E-Mail-Funktion und php div in einer separaten PHP-Seite zu bewegen, genannt sub2.php, und dann das Senden Werte auf diese Seite per 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!"); 
          } 
         }); 

posted, dies löst nicht wirklich das ursprüngliche Problem, aber es funktioniert genauso gut l. Wenn jemand eine bessere Lösung hat, wäre ich sehr erfreut zu wissen, was es ist