Mailchimp "mce-error-response" 创建文本而不是新标签

Mailchimp "mce-error-response" Creating Text Instead Of A New Tab

我正在使用如下所示的基本 mailchimp 表单

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<!-- Begin MailChimp Signup Form -->
<div id="mc_embed_signup">
<form action="http://facebook.us16.list-manage.com/subscribe/post?u=81d63ae912846f990f5307c84&amp;id=b817e70a9e" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
    <div id="mc_embed_signup_scroll">
    <h2>Subscribe to our mailing list</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
    <label for="mce-FNAME">First Name  <span class="asterisk">*</span>
</label>
    <input type="text" value="" name="FNAME" class="required" id="mce-FNAME">
</div>
<div class="mc-field-group">
    <label for="mce-LNAME">Last Name  <span class="asterisk">*</span>
</label>
    <input type="text" value="" name="LNAME" class="required" id="mce-LNAME">
</div>
<div class="mc-field-group">
    <label for="mce-EMAIL">Email Address  <span class="asterisk">*</span>
</label>
    <input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
    <label for="mce-JOB">Job Title  <span class="asterisk">*</span>
</label>
    <input type="text" value="" name="JOB" class="required" id="mce-JOB">
</div>
<div class="mc-field-group">
    <label for="mce-INDUSTRY">Industry  <span class="asterisk">*</span>
</label>
    <input type="text" value="" name="INDUSTRY" class="required" id="mce-INDUSTRY">
</div>
    <div id="mce-responses" class="clear">
        <div class="response" id="mce-error-response" style="display:none"></div>
        <div class="response" id="mce-success-response" style="display:none"></div>
    </div>    <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
    <div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_81d63ae912846f990f5307c84_b817e70a9e" tabindex="-1" value=""></div>
    <div class="clear"><input type="submit" value="Subscribe" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
    </div>
</form>
</div>
<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[0]='EMAIL';ftypes[0]='email';fnames[3]='JOB';ftypes[3]='text';fnames[4]='INDUSTRY';ftypes[4]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
<!--End mc_embed_signup-->

</body>
</html>

它与 mailchimp 一样基本.. 当我在我的浏览器中本地测试它时,它的行为符合预期,并创建了一个如下所示的新选项卡:

但是,当将完全相同的代码放在服务器上时,这个新选项卡呈现为一行文本,如下所示

有没有人注意到过这种行为?检查页面时仍然存在的错误是这个

Failed to load resource: net::ERR_FILE_NOT_FOUND

关于 "mce-error-response"

如有任何见解,我们将不胜感激。谢谢!

在本地测试代码时打开的选项卡实际上是 fallback 行为。该表单旨在直接在页面上显示验证错误,就像您在服务器上测试它时所做的那样,但由于 Failed to load resource 错误而无法在本地这样做。这是这一行的结果:

<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[0]='EMAIL';ftypes[0]='email';fnames[3]='JOB';ftypes[3]='text';fnames[4]='INDUSTRY';ftypes[4]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>

请注意 src 属性不包含 'http:' 或 'https:' 等协议。当没有协议时,它使用protocol of the current page。因此,具有 'file:///' 协议的本地文件将尝试定位不存在的 file:///s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js

该验证脚本包含使用 AJAX 提交表单的代码,正如来自 the script 的评论所示:

/**
 *  Grab the list subscribe url from the form action and make it work for an ajax post.
 */

因此,由于本地文件找不到脚本,它会回退到将表单提交到 action 属性中指定的 URL 的默认行为,并在新选项卡中打开如 target 属性中指定。