使用jquery无法正常工作的电子邮件发送:PHP

时间:2011-01-10 14:56:38

标签: php javascript ajax firefox paypal

据我所知,这个脚本在Chrome和IE中运行良好。它在Firefox中无法正常工作。 (并不是承诺一切都运行得很好 - 有时候电子邮件还没有通过,但是我们无法重新创建错误。)

编辑:现在看来,在Chrome和Firefox中,电子邮件不会在第一次尝试中发送,但如果我点击PayPal的后退按钮并提交再次,它被发送。

我认为问题可能是AdBlock Plus以某种方式禁用了脚本。在页面上禁用了ABP,它发送了......但是在刷新页面并尝试再次发送之后,它又恢复了工作状态。

此注册表格应发送包含大量表单数据的电子邮件,更改相应的输入以准备提交给用户注册的PayPal,然后将用户重定向到PayPal以单独处理付款。重定向到PayPal总是发生得很好,购物车中有适当的商品。

此代码位于HTML文件的头部。 (它过去常常使用我自己的缩小jQuery文件,所以在搜索错误时我尝试链接到这个 - 没有解决问题。)

<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script type="text/javascript" src="[myscripts].js"></script>

表单开始:

<form id="[myformname]" name="[myformname]" method="post" action="">

[myscripts] .js包含:

$(function() {  
  $('.error').hide();  
  $(".button").click(function() {

    // many lines pulling input from form, generally of the type:
    var firstname = $("input#firstname").val();
    // as well as 
    var subscribe = $("input#subscribe").is(':checked');

    // simple validation code for now, here is a generalized version
    if (firstname == ''){
       $('p#errors').html("Error: First name is required.");
       $("p#errors").show();
       return false;
    }
    else if (lastname == ''){
       $('p#errors').html("Error: Last name is required.");
       $("p#errors").show();
       return false;    
    }
    else {
       $("p#errors").hide();
    }


    fixFields();   // this does the adjustment for PayPal
                   // checked checkboxes -> item_name_1, amount_1, etc.

    // in the real code, submitString is very long
    var submitString = 'firstname='+firstname+'&lastname='+lastname+'&email='+email+'&subscribe='+subscribe; // etc.

    $.ajax({  
      type: "POST",  
      url: "register.php",  
      data: submitString,  
      success: function() {
        return false;
      }  
    });

    submitForm(); // resets action to PayPal link, resubmits

  });  
});  

如果它是相关的,这里是之前在[myscripts] .js中定义的submitForm方法:

function submitForm(){
  var form_url = $("#[myformname]").attr("action"); 
  //changing the action
  $("#[myformname]").attr("action","https://www.paypal.com/cgi-bin/webscr");
  //submit the form
  $("#[myformname]").submit();
  return true;
}

这是register.php:

<?php
 $to = "[example1]@gmail.com,[example2]@gmail.com";
 $subject = "New Registration";
 $headers = "From: webmaster@[mysite.com]";

 // shortened for readability's sake
 $name = $_POST['firstname']." ".$_POST['lastname'];

 $body = "INFORMATION\n".$name."\n".$_POST['email'].", Subscribe: ".$_POST['subscribe'];

 $body = $body."\nSELECTIONS\n";
 if ( $_POST['option1']=="true" ) {
    $body = $body."Option 1 Name\n     Details Line 1\n     Details Line 2\n";
 }
 if ( $_POST['option2']=="true" ) {
    $body = $body."Option 2 Name\n     Details Line 1\n     Details Line 2\n";
 }

 mail($to, $subject, $body, $headers);

?>

对不起,如果这是一篇非常漫长的帖子。我是一名编程爱好者,对我在这里使用的许多语言都很陌生,所以我希望尽可能清楚。提前感谢任何建议。

3 个答案:

答案 0 :(得分:3)

您可能没有给它足够的机会通过AJAX发送表单,然后再将其提交给paypal,尝试移动submitForm() AJAX函数中的success函数。

答案 1 :(得分:0)

这是一个JavaScript错误。不是PHP错误。在Firefox上安装firebug,启用控制台,保留所有错误并尝试运行脚本。你会看到问题。

此外,JavaScript条件与PHP略有不同。如果(blah =='')编码不好。

如果你想要长度,它应该是:if(blah.length&gt; = 1)。我会看看你的javascript,看看有什么突出的东西..

但是,答案是在你的firefox控制台中进行调试。

好的,这是你的问题...... 您正在提交表单,尝试在您的jquery ajax方法中收到响应之前继续前进。您需要单击按钮,它会触发ajax调用,然后在完成之前不执行任何操作。我会为你写一个剧本并很快发布。

解决方案:

$.ajax({  
      type: "POST",  
      url: "register.php",  
      data: submitString,  
      success: function() {
        submitForm();
      }, error: function() {
         //something went wrong, use console.log here if you know what that is.
      }  
 });

    //submitForm(); // this was firing before ajax was done.

答案 2 :(得分:-1)

尝试检查if(isset($_POST["whatever"]) AND $_POST["whatever"])。发送字符串“true”是一种浏览器约定。