首页 文章

提交一个表单和Ajaxing

提问于
浏览
1

我使用下面的代码提交表单 AND 在aweber电子邮件列表中注册(addlead.pl只是一个注册脚本) . 这是我想要完成的:用户提交一个表单 - 它将他注册到一个电子邮件列表中(使用两个表单字段中的两个),因为它是注册表单,然后用户被重定向到正常表单操作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;

});

代码有效但只有魔术线 - 警告"thank you" - 没有这一行它只会提交默认表单操作而不是注册到aweber . 我已经想通了,如果我尝试提交表单(返回true)并同时发送这样的POST请求 - 站点将刷新太快并且没有其中一个请求 . Question is how do i do it without alert / some fixed delay in this line. Is there some kind of fancy command for it ?

1 回答

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

    • 因为你不能Ajax到另一个域,如果要在客户端上运行它,你需要更具创造性

    所以在提交活动中我们

    • 将目标更改为hiddenframe2

    • 将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,那么COULD已经完成了这项工作,因为跨域脚本编写,您无法做到这一点 . 如果他们支持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" />
    

相关问题