1

我使用下面的代码提交表单在 weber 电子邮件列表中注册(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 请求 - 站点将刷新太快并且忽略其中一个请求。 问题是我如何在这条线上没有警报/一些固定延迟的情况下做到这一点。有什么花哨的命令吗?

4

1 回答 1

3
  1. 绝对最好的解决方案是让您的表单请求在服务器上使用 CURL 或类似方法调用 weber

  2. 因为你不能 Ajax 到另一个域,如果你要在客户端上运行它,你需要更有创造力

所以在提交事件中我们

  1. 将目标更改为 hiddenframe2
  2. 提交 aweber 表单到 hiddenframe1
  3. 让主窗体提交到 hiddenframe2

现在您需要在主表单的 RESULT 中返回类似

<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" />
于 2013-11-12T13:52:47.277 回答