【问题标题】:Success function not being called when form is submitted提交表单时未调用成功函数
【发布时间】:2010-06-08 18:18:23
【问题描述】:

我一直在试图弄清楚为什么以下脚本的成功函数没有运行。我的表单中的所有内容都运行良好,并且表单内容已正确通过电子邮件发送,但未调用成功函数。

如果有人可以查看我的代码并告诉我为什么没有调用我的成功函数,我将非常感激!

这是带有通知 div 的 HTML 表单,通过 css 隐藏:

<div id="success" class="notification">
  <p>Thank you! Your message has been sent.</p>
</div>
<div id="failure" class="notification">
  <p>Sorry, your message could not be sent.</p>
</div>
<form id="contact-form" method="post" action="" class="jqtransform">
  <label for="name">Name:</label>
  <input name="name" id="name" type="text" class="validate[required] input" />
  <label for="company">Company:</label>
  <input name="company" id="company" type="text" class="input" />
  <label for="phone">Phone:</label>
  <input name="phone" id="phone" type="text" class="input" />
  <label for="email">Email:</label>
  <input name="email" id="email" type="text" class="validate[required,email] input" />
  <div class="sep"></div>
  <label for="subject">Subject:</label>
  <input name="subject" id="subject" type="text" class="validate[required] input" />
  <div class="clear"></div>
  <label for="message">Message:</label>
  <textarea name="message" id="message" class="validate[required]"></textarea>
  <div id="check-services">
    <input type="checkbox" name="services[]" value="Contractor Recommendation" />
    <div>Contractor Recommendation</div>
    <input type="checkbox" name="services[]" value="Proposal Review" />
    <div>Proposal Review</div>
    <input type="checkbox" name="services[]" value="Existing Website Review" />
    <div>Existing Website Review</div>
    <input type="checkbox" name="services[]" value="Work Evaluation" />
    <div>Work Evaluation</div>
    <input type="checkbox" name="services[]" value="Layman Translation" />
    <div>Layman Translation</div>
    <input type="checkbox" name="services[]" value="Project Management" />
    <div>Project Management</div>
  </div>
  <div class="sep"></div>
  <input name="submit" id="submit" type="submit" class="button" value="Send" />
  <input name="reset" id="reset" type="reset" class="button" value="Clear" onclick="$.validationEngine.closePrompt('.formError',true)" />
</form>

这里是javascript:

// CONTACT FORM VALIDATION AND SUBMISSION
$(document).ready(function(){
 $('#contact-form').validationEngine({
  ajaxSubmit: true,
  ajaxSubmitFile: 'lib/mail.php',
  scroll: false,
  success:  function(){
   $('#success').slideDown();
  },
  failure: function(){
   $('#failure').slideDown();
   $('.formError').animate({
    marginTop: '+30px'
   });
  }
 });
});

这是我的 PHP 邮件脚本:

<?php
$name = $_POST['name'];
$company = $_POST['company'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$message = $_POST['message'];
$services = $_POST['services'];

$to = 'contact@tomhartmanconsultant.com';
$subject = 'THC - Contact';

$content .= "You received a message from ".$name.".\r\n\n";
if ($company): $content .= "They work for ".$company.".\r\n\n";
endif;
$content .= "Here's the message:\r\n\n".$message."\r\n\n";
$content .= "And they are interested in the services below:\r\n\n";
$content .= implode("\r\n",$services);
if ($phone): $content .= "\r\n\nYou can reach them at ".$phone.".";
else: $content .= "\r\n\nNo phone number was provided.";
endif;

$headers = "From: ".$name."\r\n";
$headers .= "Reply-To: ".$email."\r\n";

if (mail($to,$subject,$content,$headers)):
 return true;
else:
 return false;
endif;
?>

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    在您的邮件脚本中,回显 true 或 false:您希望浏览器可以读取该内容。此外,调试来回的数据(查看 firebug)以查看您发送的内容与收到的内容。

    请记住,无论您回应什么,只要有内容,您就应该成功。成功意味着它连接到您的页面并获取数据 - 如果请求一起失败,则失败(尽管很确定这应该是错误,根据 $.ajax 文档)处理。

    在成功的情况下,您会查看返回的结果(无论是布尔值、字符串、json 等)是否是您想要的结果,然后从那里开始。

    【讨论】:

    • 我明白了,我回显了 true 或 false,并且触发了 jquery.validationEngine 的调试模式。我收到一条消息,指出:您没有进入成功功能,并且 jsonValidateReturn 什么也不返回 不完全确定我应该回显什么。
    • 您可以回显一个值,例如 echo 1; 如果为真,echo 0 如果为假。那么在你的成功函数中,它会是success: function(data) { if(data == 1) { alert('it worked!'); }else{ alert('uh oh!'); }
    • 我试过了,但在 FireBug 中出现以下错误:data.jsonValidateReturn is undefined
    • 我不熟悉validationEngine插件-听起来它正在将返回值设置为json。像echo json_encode(array('result' =&gt; true)); 这样的东西应该可以工作。然后在你的成功函数中:if(data.result) {
    • 嗯,我仍然遇到同样的错误,但我认为它在正确的轨道上。我会继续尝试这个。感谢您的帮助!
    【解决方案2】:

    你不应该在你的 php 脚本中设置$isValidate = true 来表示验证通过了吗?顺便问一下,从 php 脚本返回 true/false 有什么意义?

    【讨论】:

    • 我尝试将 $isValidate 设置为 true,但收到语法错误。但我认为只有在使用 php 验证表单并返回错误消息时才需要 $isValidate。我的验证是通过 jQuery 处理的,PHP 邮件程序只通过电子邮件发送数据。我不确定我应该返回什么,所以我尝试返回 true 或 false。
    • "return" 在这种情况下是无关紧要的。您可以从函数返回值,但不能从脚本返回。您需要打印/回显它。或者使用 exit/die()
    【解决方案3】:

    我最终只是修改了 jquery.validationEngine.js 文件,这样默认的成功参数就不会检查从 php 邮件文件返回的任何数据。不是我最喜欢的方式,但它适合我的需要。

    感谢大家的帮助!

    【讨论】:

      猜你喜欢
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多