所以我无法完全理解发生了什么。我正在使用Fancybox来启动电子邮件提交流程。此过程收集信息(姓名,电子邮件等),然后通过表单'发送'发送这些值。然后,此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> </td>
<td> </td>
<td> </td>
<td> </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();
});
});
修改 尝试使用jquery post方法,并且仍然有相同的结果(咳嗽,没有结果):
$("#btnSubmit").click(function () {
$.post("mail.php", $("#default-behavior").serialize());
//$('#default-behavior').submit();
});
为了进一步确认这与fancybox直接相关,我尝试了带有显式参数的jquery帖子并且它适当地发送了数据,即:
$("#btnSubmit").click(function () {
$.post("mail.php", { email: "email@email.com", story: "blah blah test story" });
//$('#default-behavior').submit();
});
答案 0 :(得分: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变量,然后通过post将这些变量发送到.php文件(显然可行),这让我有不同的想法(除非在过程中有一些我缺少的东西)。所以我真的很想解决这个问题,弄清楚为什么在调用$("element").serialize()
时它会传递空值。
对于这个应用程序来说,它是一个非常重要的因素 - 显式分配值很小,因为它很少。但是,当将大量值传递给服务器端或者不是这样时,这显然是一个巨大的问题,因此解决这个完全相关但又独立的问题真的很好。
tl;博士 - 该死的你好吗。