据我所知,这个脚本在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);
?>
对不起,如果这是一篇非常漫长的帖子。我是一名编程爱好者,对我在这里使用的许多语言都很陌生,所以我希望尽可能清楚。提前感谢任何建议。
答案 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”是一种浏览器约定。