Squarespace:表单提交失败:使用JavaScript成功处理表单数据后,表单未提交到Mailchimp

时间:2019-06-30 18:57:00

标签: forms mailchimp squarespace mailchimp-api-v3.0

我在Squarespace表单块中有一个表单。我在提交之前成功拦截了表单(使用form.submit()侦听器),并成功读取和处理了数据。我只读取表单数据(Array.from($('select')))。除了在提交之前拦截表单之外,我不会干扰表单结构或提交过程。未设置e.preventDefault()

JavaScript成功执行。它将表更新数据提交到Amazon Web Services表。 AWS将日志发送到控制台,以确认成功。我让JavaScript成功终止。我在最后尝试了一次form.submit()通话,但是没有效果。

没有错误消息。

真正有趣的异常行为是,我已经对其进行了测试,发现在五项测试中,有两项(第一项和第三项)成功更新了Mailchimp列表,而其中三项没有成功。对于这三个,我收到了Squarespace电子邮件,通知您表单提交失败。除了说向MailChimp提交失败外,它没有显示任何错误消息。

但是,当我连接到电子邮件地址时,每次提交都成功。我收到了有关该提交的电子邮件通知。只是当表单存储为MailChimp时,提交才会失败(有时)。

我在Squarespace表单存储对话框中从表单断开了MailChimp列表。我从Mailchimp上已批准的应用程序列表中删除了Squarespace,然后将存储重新连接到Mailchimp列表,然后再次对其进行了测试。提交失败。

您可以在this page上找到该表格。可以在this page上找到所有JavaScript。我也将其放在下面的代码段中。它没有与AWS的实时连接,因为我必须在脚本中放入AWS“秘密”访问密钥,而我不愿意这样做。

如果有人可以为我提供指导,说明发生这种情况的原因以及解决方法,我一定会感激不尽。实际上,无论您是否可以提供帮助,我都非常感谢您已经阅读了本文。谢谢。

$('form').submit(function(e) {
  e.preventDefault();
  var a = Array.from($('select'))
    .map((select, i) => ({
      'index': i,
      'room': select.value
    }))
    .filter(select => select.room !== 'unsure' && select.room !== 'not attend');
  if( !a || a.length == 0 ) {console.log('a is null or undefined, or a.length == 0');}
    else {
     if(a[0].room == 'attend') {a[0].room = 'chapel';}  
     alert(JSON.stringify(a));
//   updateTable(a);
   }  //  end else
}); //  end def anonymous fn & submit

function updateTable(classes) {
  var timeslots = ['0830', '0900', '1030']
  var params = {};
  var ts = '';
  var rm = '';
  var dynamoDB = new AWS.DynamoDB();
  var err = null;
  
  for(var i = 0; i < classes.length; i++) {
    ts = timeslots[classes[i].index];
    rm = classes[i].room;
    console.log('ts, rm : ', ts, rm);
    params = {
                  'TableName': 'FHCRoomCounts',
                  'Key': {
                            'room': {
                                      'S' : rm
                                    },
                            'timeSlot': {
                                           'S': ts
                                        }
                         },
                  'ExpressionAttributeNames': {
                                                '#registrants': 'registrants'
                                              },
                  'ExpressionAttributeValues': {
                                                 ':n': { 'N': '1'} 
                                               
                                               },
                  'UpdateExpression': 'ADD #registrants :n',
                  'ReturnValues': 'ALL_NEW'
             };  // end params
             
               console.log('log params for i == ' + i);
               console.log(params);
               console.log('Executing dynamoDB updateItem on iteration i = ' + i);
                                        
    dynamoDB.updateItem(params, function(err, data) {
          if (err) {
                      console.log('Unable to update registrant: ' + '\n' + JSON.stringify(err, undefined, 2));
            } else {
                      console.log('Increase registrant succeeded: ' + '\n' + JSON.stringify(data, undefined, 2));
                   }  // end else
    });  // end def anonymous fn & def updateItem stateme
  }  //  end for
}  //  end def fn updateTable
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post">
  <div>
    <label>First Name
    <input type="text" name="fname" size="25">
  </label>
  </div>
  <div>
    <label>Last Name
    <input type="text" name="lname" size="25">
  </label>
  </div>
  <div>
    <label>email address
    <input type="email" name="email" size="25">
  </label>
  </div>
  <div>
    <label>08:30 Keynote Speaker
    <select class="select" name="select 0830">
      <option value="unsure">unsure</option>
      <option value="attend">attend</option>
      <option value="not attend">not attend</option>
    </select>
  </label>
    <label>09:00 Classes
    <select class="select" name="select 0900">
      <option value="unsure">unsure</option>
      <option value="A">room A</option>
      <option value="B">room B</option>
    </select>
    </label>
    <label>10:30 Classes
    <select class="select" name="select 1030">
      <option value="unsure">unsure</option>
      <option value="A">room A</option>
      <option value="B">room B</option>
    </select>
  </label>
  </div>
  <div>
    <input type="submit" value="submit form">
  </div>
</form>

1 个答案:

答案 0 :(得分:1)

我发现此错误消息通常是以下任一原因导致的结果:

  1. MailChimp所需的字段未填写在表单上(请仔细检查并在测试期间始终填写字段),或者
  2. 该人(电子邮件地址)已经在MailChimp列表中。
  3. 该电子邮件地址以前在列表中,但已被删除。 MailChimp不会重新添加已删除的用户。

假设它不是您的自定义javascript,并且无论是否添加自定义JS,您都将获得相同的结果,请检查这两种可能的原因。