我已经构建了此Mailchimp新闻订阅注册插件。 PHP不是我的强项,所以我无法修复它的错误。
我使用了此Mailchimp包装器:https://github.com/drewm/mailchimp-api。
我的PHP文件是:
<?php
include('MailChimp.php'); // path to API wrapper downloaded from GitHub
use \DrewM\MailChimp\MailChimp;
function sm_mailchimp_subscribe()
{
// Settings:
$mcAPIKey = '70000000000000000007e-us00';
$mcListID = '323231214212';
$status = 'subscribed';
// Settings End
$MailChimp = new MailChimp($mcAPIKey);
$email = $_POST['email'];
$fname = $_POST['fname'];
$sname = $_POST['sname'];
$merge_vars = array(
'FNAME' => $fname,'LNAME' => $sname
);
if (isset($email) and isset($fname) and isset($sname)) {
$result = $MailChimp->post("lists/" . $mcListID . "/members",[
'email_address' => $email,'merge_fields' => $merge_vars,'status' => $status,]);
return json_encode($result);
}
}
if ($_POST['ajax']) {
echo sm_mailchimp_subscribe();
} elseif ($_POST['action'] == 'setCookies') {
echo setCookiesTemp();
}
function setCookiesTemp()
{
setcookie('sm_mailchimp-temp',true,time() + (86400 * 28),'/');
}
function setCookiesPerm()
{
setcookie('sm_mailchimp-perm',time() + (86400 * 28 * 24),'/');
}
这是JS:
jQuery(function($) {
// From wp_localized
const ajaxURL = ajax_obj.ajax_url;
$(document).ready(function() {
var body = $("body");
var modal = `<div class="sm_mailchimp-modal">
<div class="sm_mailchimp-box">
<button class="sm_mailchimp-close">X</button>
<h3>Join Our Mailing List</h3>
<form name="sm_mailchimp-form" method="post" class="sm_mailchimp-form light">
<p>Subscribe to our newsletter and receive tips for a successful business.</p>
<input type="email" name="email" placeholder="Type Your Email" class="sm_sname">
<div class="sm_mailchimp-message"></div>
<button type="submit">SIGN UP</button>
</form>
</div>
</div>`;
if (!document.cookie.includes("sm_mailchimp-temp=1")) {
$(modal)
.hide()
.appendTo(body);
setTimeout(function() {
$(".sm_mailchimp-modal").fadeIn();
},5000);
}
$(".sm_mailchimp-close").click(function() {
closeModal();
});
$(".sm_mailchimp-modal").click(function(e) {
if (e.target == this) {
closeModal();
}
});
function closeModal() {
$(".sm_mailchimp-modal").fadeOut();
$.ajax({
url: ajaxURL,method: "POST",data: { action: "setCookies" },success: function(data) {
console.log("Cookie added as sm_mailchimp-temp=1");
}
});
}
$(".sm_mailchimp-form").submit(function() {
var emailVal,fnameVal,snameVal;
emailVal = $(".sm_email",this).val();
fnameVal = $(".sm_fname",this).val();
snameVal = $(".sm_sname",this).val();
if (emailVal === "" || fnameVal === "" || snameVal === "") {
$(".sm_mailchimp-message").html("Please fill out all the fields!");
return false;
} else {
$(".sm_mailchimp-message").html("Adding your email address...");
var form = $(this);
$.ajax({
url: ajaxURL,type: "POST",data: form.serialize() + "&ajax=true",success: function(msg) {
var message = $.parseJSON(msg),result = "";
if (message.status === "pending") {
result =
"Success! Please click the confirmation link that will be emailed to you shortly.";
} else if (message.status === "subscribed") {
result =
"Success! You have been subscribed to our mailing list.";
} else {
result = "Oops: " + message.title;
console.log("Error: ",message);
}
$(".sm_mailchimp-message").html(result);
}
});
return false;
}
});
});
});
错误如下:
单击“注册”按钮后,应显示“正在添加您的电子邮件地址...”消息,但该消息在那里冻结。控制台显示以下错误:
很奇怪,它过去可以正常工作。而且没有改变,它就停止了。我是几个月前建造的。
更新
错误实际上来自success: function(msg) {
行。 msg
为空。因此,当到达message.status
时,它无法读取状态为null的属性。
问题:为什么成功回调返回msg
为空?