0

ですから、何が起こっているのか完全には理解できません。私はFancyboxを使用してメール送信プロセスを立ち上げています。このプロセスは、情報(名前、電子メールなど)を収集し、フォーム「post」を介してそれらの値を送信します。次に、このphpファイル(mail.php)は値を取得し、それらを使用して適切なフィールドにデータを入力し、メールメッセージを送信します。かなり簡単に思えます。

メッセージは送信されますが、メール送信フォームから取得しているデータがそこにないようです。fancyboxからフォームを取り出してページにわかりやすく表示すると、phpファイルに適切な値が送信されるので、明らかにこれはfancyboxと関係があります。

私はfancyboxを完全に理解していません(ソースを調べていません)。また、同様の問題を検索しても肯定的な結果が得られていません(おそらく、不適切な検索用語を使用しているだけです)。

とにかく、誰かがここで儀式の方向に私を案内してくれるなら、これは行き詰まるのはとても苛立たしいことです。

参考のために:

HTML-

  <form id="default-behavior" action="mail.php" method="post">
<div style="display:none">
    <div class="TextCopyright" id="accept" style="width: 700px; font-size: 10px">
        page one
                </br></br><a id="submitClick" href="#submitPage"><button id="conditionButton" type="button" class="submitBtns">I agree to the terms and conditions above</button></a>
    </div>
</div>
<div style="display:none">

        <div id="submitPage">
            <table border="0" cellspacing="0px" class="TextBlock" style="margin-top: 10px" bgcolor="#FFFFFF">
                <tr>
                    <td class="TextBlockOrangeForm"><strong>Name:</strong></td>
                    <td><input type="text" class="formText" name="txtName" id="txtName" style="margin-right:50px"/></td>
                    <td class="TextBlockOrangeForm"><strong>Email:</strong></td>
                    <td><input type="text" class="formText" name="email" id="email"/></td>
              </tr>
                <tr>
                    <td class="TextBlockOrangeForm"><strong>Phone:</strong></td>
                    <td><input type="text" class="formText" name="txtPhone" id="txtPhone"/></td>
                    <td class="TextBlockOrangeForm"><strong>Fax:</strong></td>
                    <td><input type="text" class="formText" name="txtFax" id="txtFax"/></td>
                </tr>
                <tr>
                    <td class="TextBlockOrangeForm"><strong>Address:</strong></td>
                    <td><input type="text" class="formText" name="txtAddress" id="txtAddress"/></td>
                    <td class="TextBlockOrangeForm"><strong>City:</strong></td>
                    <td><input type="text" class="formText" name="txtCity" id="txtCity"/></td>
                </tr>
                <tr>
                    <td class="TextBlockOrangeForm"><strong>Prov/State:</strong></td>
                    <td><input type="text" class="formText" name="txtProv" id="txtProv"/></td>
                    <td class="TextBlockOrangeForm"><strong>Postal/Zip:</strong></td>
                    <td><input type="text" class="formText" name="txtPostal" id="txtPostal"/></td>
                </tr>
                <tr>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
                  <td>&nbsp;</td>
              </tr>
            </table>
  </br>
            <textarea name="story" class="formText" id="story" style="width:490px; height: 125px">
            </textarea><br>
            <input type="submit" value="Submit Story" id="btnSubmit"/>      
        </div>

</div>
    </form>  

PHP-

$message = $_POST['story']; 

$headers = 'From:' . $from . "\r\n" .
'Reply-To:' . $from . "\r\n" .
'X-Mailer: PHP/' . phpversion();

// now lets send the email. 
mail($to, $subject, $message, $headers); 

echo "Message has been sent....!".$message; 

js-

    $(document).ready(function() {
$("#story").text("");

$("a#inline").fancybox({
    'hideOnContentClick': true,
    'showCloseButton'   : true,
        'autoDimensions': true      
});

$("#submitClick").fancybox({
    'hideOnContentClick': true,
    'showCloseButton'   : true,
        'autoDimensions': true      
});

$("#btnSubmit").click(function () {
    $('#default-behavior').submit();
});
    });        

EDIT はjquerypostメソッドをそのまま使用してみましたが、同じ結果が得られました(咳、結果なし)。

        $("#btnSubmit").click(function () {
    $.post("mail.php", $("#default-behavior").serialize());
    //$('#default-behavior').submit();
});

そして、これがファンシーボックスに直接関連していることをさらに確認するために、明示的なパラメーターを使用してjquery postを試し、データを適切に送信しました。

    $("#btnSubmit").click(function () {
    $.post("mail.php", { email: "email@email.com", story: "blah blah test story" });
    //$('#default-behavior').submit();
});
4

1 に答える 1

0

わかりましたので、問題は解決しました。

jquery $.post() メソッドを利用することで、フォームの値を php ファイルに送信できました。

このような:

  $("#btnSubmit").click(function () {
    var ml = $("#email").val();
    var stry = $("#story").val();

    $.post("mail.php", { email: ml, story: stry });
});  

これは私が必要としているもので機能するため、問題を効果的に解決しました。それでもいくつか質問があります。最初は、fancybox がフォーム要素を再作成し、「複製された」要素を fancybox 内に配置している可能性があると考えていたため、元の要素にアクセスしようとすると、入力値の代わりに "" しか表示されませんでした。しかし、要素を js 変数に明示的に割り当ててから、それらの変数をポスト経由で .php ファイルに送信する (これは明らかに機能します) ことで、(プロセスに何か欠けているものがない限り) 別の考え方ができます。だから私は本当にこれを解決したいと思っています.なぜそれを呼び出すときに$("element").serialize()空の値を渡すのかを理解してください.

このアプリケーションでは、それはあまり重要ではない要因です。値が非常に少ないため、明示的に値を割り当てることは重要ではありません。ただし、これは明らかに大きな問題になる可能性があり、多数の値をサーバー側またはそうでないものに渡す場合、この完全に関連しているが別の問題を解決することは本当に良いことです.

tl;dr - いまいましいファンシーボックス。

于 2012-07-25T22:08:09.063 に答える