【发布时间】: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