【问题标题】:Squarespace: form submission failure: After successfully processing form data with JavaScript, the form doesn't submit to MailchimpSquarespace:表单提交失败:使用 JavaScript 成功处理表单数据后,表单未提交到 Mailchimp
【发布时间】:2019-11-11 14:47:38
【问题描述】:

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

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

没有错误消息。

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

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

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

您可以在this page 上找到该表格。所有的 JavaScript 都可以在 this page 上找到。我也把它放在下面的sn-p中。它没有与 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>

【问题讨论】:

  • 我猜想,即使您删除了自定义 javascript,您也会继续看到您提到的行为。您是否在不使用自定义 JS 的情况下进行了测试,并确定您得到相同还是不同的结果?
  • @Brandon 我有。我在这里发帖之前做过。我应该说。注释掉自定义 JS 后,表单与 MailChimp 正确连接。有了脚本,它就不会了,尽管如果我选择该选项,它确实会连接到电子邮件地址。当然,在前 5 次尝试中,它确实连接到 MailChimp 两次,但此后就没有了。
  • @Brandon 感谢您遇到的所有麻烦。这是 Mailchimp 的结果——我不知道我正在反对的一个新功能。他们改变了处理已删除列表订阅者的方式。一旦删除,后续尝试提交将无法通过。而且我已经删除了自己,因此我的电子邮件地址的后续尝试被拒绝 - 没有通知或消息。我终于接通了 Mailchimp 技术支持,他们告诉我发生了什么。再次感谢您的关注和时间。我真的很感激。
  • 我怀疑不是你的JS。我还观察到已删除的用户不会被重新添加。但是,在这种情况下,不应生成带有“出现问题...”的电子邮件...不应该默默地添加用户。我怀疑您确实遇到了一系列相关但独立的问题,并且恰好与您的代码更新保持一致。我会更新我的答案,因为我认为这个问题将来会被搜索。
  • 谢谢,布兰登。你是个好人。我希望它对将来的人有所帮助。

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


【解决方案1】:

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

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

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

【讨论】:

  • 布兰登:感谢您的关注。 MailChimp 唯一标记为必填的字段是电子邮件地址,对此我无法控制。 Squarespace 端的所有必填字段均已填写。没有自定义 JS,我得到了肯定的结果。只有这样,提交才能连接到 MailChimp。我有六个电子邮件地址可以使用,所以我不会在测试中重复。但是,我已经检查过,如果电子邮件地址已存在于列表中,MailChimp 只需将列表中的值替换为新提交中的值。
  • 在我的第一条评论中我没有想到,但您提到了“此错误消息”。我的部分问题是没有错误消息。代码正常运行,没有错误。控制台日志显示来自 AWS 的确认消息,表明表更新成功。脚本正确终止,没有错误。无法连接到 MailChimp 不会生成错误消息。我收到了一封来自 Squarespace 的电子邮件,通知我连接失败,但除此之外没有其他错误消息。这是我沮丧的一部分。
  • 还有一条消息,布兰登。除了成功连接到电子邮件地址外,它还连接到 Google Drive 电子表格。只有 MailChimp 帐户似乎是问题所在。我向 MailChimp 提出技术支持请求。
猜你喜欢
  • 2015-03-04
  • 1970-01-01
  • 2014-11-26
  • 2015-07-26
  • 2017-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多