我使用以下代码提交表单并在aweber电子邮件列表中注册(addlead.pl 只是一个注册脚本)。以下是我想要完成的:用户提交表单 - 它会在 aweber 电子邮件列表中注册他(使用许多表单字段中的两个),因为它是注册表单,然后用户被重定向到包含表单中发布信息的正常表单操作 URL(所有字段)
$('#redeemform').submit(function() {
var nameVal = $(this).find('input[name="custname"]').val();
var emailVal = $(this).find('input[name="custemail"]').val();
$.post('http://www.aweber.com/scripts/addlead.pl', {
meta_web_form_id: '1234',
meta_split_id: '',
listname: 'listname',
redirect: '',
meta_adtracking: 'newsletter',
meta_message: '1',
meta_required: 'name,email',
meta_tooltip: '',
email: emailVal,
name: nameVal
});
alert("thank you"); //<<magic line
return true;
});
代码有效,但只能使用魔术行 - 警报"谢谢" - 没有这一行,它只会提交到默认表单操作而不注册到 aweber。我已经发现,如果我尝试提交表单(返回 true)并同时发送这样的 POST 请求 - 网站会刷新太快并接收其中一个请求。问题是我如何在没有警报/此行中某些固定延迟的情况下做到这一点。有没有某种花哨的命令?
-
绝对最好的解决方案是让你的表单请求在服务器上使用 CURL 或类似内容调用 weber
-
由于您不能将 Ajax 到另一个域,因此如果要在客户端上运行它,则需要更具创造力
所以在提交事件中,我们
- 将目标更改为隐藏帧2
- 将 AWEBER 表单提交到 Hiddenframe1
- 让主窗体提交到 hiddenframe2
现在你需要在你的主窗体的结果中返回类似的东西
<script>top.location.replace("thankyou.html");</script>
假设您的表单将请求发送到 HTML 来自的同一服务器
并有
$('#redeemform').on("submit",function() {
$(this).prop("target","hiddenframe2");
if (!$("#hiddenframe1")) {
$("<iframe/>",{"id":"hiddenframe","name":"hiddenframe1"})
.css("display","none")
.appendTo("body");
}
if (!$("#hiddenframe2")) {
$("<iframe/>",{"id":"hiddenframe","name":"hiddenframe2"})
.css("display","none")
.appendTo("body");
}
var nameVal = $(this).find('input[name="custname"]').val();
var emailVal = $(this).find('input[name="custemail"]').val();
$("<form>",{"action":"http://www.aweber.com/scripts/addlead.pl",
"target":"hiddenFrame1"})
.append("<input/>",{meta_web_form_id: '1234'})
.append("<input/>",{meta_split_id: ''})
.append("<input/>",{listname: 'listname'})
.append("<input/>",{redirect: ''})
.append("<input/>",{meta_adtracking: 'newsletter'})
.append("<input/>",{meta_message: '1'})
.append("<input/>",{meta_required: 'name,email'})
.append("<input/>",{meta_tooltip: ''})
.append("<input/>",{email: emailVal})
.append("<input/>",{name: nameVal})
.submit();
});
如果你能够将Ajax到aweber,这是可以做的事情,由于跨域脚本,你不能这样做。如果他们支持 JSONP/CORS,你也许可以做到
$('#redeemformButton').on("click",function() {
var $form = $('#redeemform');
var nameVal = $form.find('input[name="custname"]').val();
var emailVal = $form.find('input[name="custemail"]').val();
$.post('http://www.aweber.com/scripts/addlead.pl', {
meta_web_form_id: '1234',
meta_split_id: '',
listname: 'listname',
redirect: '',
meta_adtracking: 'newsletter',
meta_message: '1',
meta_required: 'name,email',
meta_tooltip: '',
email: emailVal,
name: nameVal
},function() {
$form.submit();
});
});
并有一个
<input type="button" id="redeemformButton" value="Sign up and submit" />