0
我有一個訂閱對話框,它接收電子郵件地址,然後將其插入Mailchimp。POST函數運行兩次,第一次API調用失敗,第二次運行。
它的拋出錯誤使得體驗不是很好。進一步調查後,它看起來像POST正在運行兩次。
它第一次運行api調用總是失敗,但它再次運行並工作,並將電子郵件放入數據庫中。
我試圖找到問題的原因,因爲它運行兩次AJAX功能總是觸發一個錯誤,這意味着基於函數是成功的(在可變subscribeissuccess點我不能做的事情。
任何幫助,將不勝感激
AJAX的功能:
$.ajax({
type: "POST",
url: "/subscribe",
data: data,
success: function(data){
$("#subscribe-form2 :input").prop("disabled", false);
if(data.success){
subscribeissuccess = 'TRUE';
} else {
$('#subscribe-message2').html('Error occurred during subscribe. Please try again later.');
}
}, error: function(){
$("#subscribe-form2 :input").prop("disabled", false);
$('#subscribe-message2').html('Error occurred during during subscribe. Please try again later.');
}
});
的API插入/訂閱:
module.exports = function(req, res){
var emailId = req.body.email;
var button = req.body.subscribe;
var api = require('../api');
var apikey = "removed";
var listid = "removed";
var body = JSON.stringify({apikey: apikey, id: listid, email: {'email': emailId}, merge_vars:{groupings:[{name:"MERGE1", groups:[button]}]}, double_optin: false, send_welcome: false}),
link = "/2.0/lists/subscribe.json";
api.call(link, body, function(data){
try{
var ret = JSON.parse(data);
console.log(data);
if(ret.leid && ret.euid) res.json({success: true});
else if(ret.code && ret.code == 214) res.json({success: true});
else res.json({success: false});
} catch(e){
res.json({success: false});
}
}, function(err){
res.json({success: false});
});
};
在 '... API'
module.exports = {
call: function (endpoint, body, callback, errcallback){
var http = require('https');
var options = {
host: 'us5.api.mailchimp.com',
post: 443,
path: endpoint,
headers: {
"Content-Type": "application/json",
"Content-Length": Buffer.byteLength(body),
accept: '*/*'
},
method: 'POST'};
var req = http.request(options, function(res){
console.log('STATUS:' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
var data = '';
res.on('data', function(chunk){
data = data + chunk;
});
res.on('end', function(){
callback(data);
});
});
req.on('error', function(e){
console.log('problem with request: ' + e.message);
errcallback(e);
});
req.write(body);
req.end();
}
};
的錯誤,我得到在成功添加一個電子郵件的功能:
STATUS:500
HEADERS: {"server":"openresty","content-type":"application/json; charset=utf-8","content-length":"128","x-mailchimp-api-error-code":"-100","date":"Thu, 05 Jan 2017 22:59:51 GMT","connection":"close","set-cookie":["_AVESTA_ENVIRONMENT=prod; path=/"]}
{"status":"error","code":-100,"name":"ValidationError","error":"The email parameter should include an email, euid, or leid key"}
POST /subscribe 200 146ms - 17b
STATUS:200
HEADERS: {"server":"openresty","content-type":"application/json; charset=utf-8","content-length":"63","vary":"Accept-Encoding","date":"Thu, 05 Jan 2017 22:59:51 GMT","connection":"close","set-cookie":["_AVESTA_ENVIRONMENT=prod; path=/"]}
{"email":"[email protected]","euid":"24d1d1b89e","leid":"118400873"}
POST /subscribe 200 277ms - 16b
我的猜測是,當你發送AJAX請求時,你並沒有阻止默認的表單提交。 – Barmar
如果您發佈您的表單HTML和事件代碼,它將有助於確認@Barmar的意見(我同意) –
感謝您的建議!它變得更簡單。當我去這裏複製代碼時,我注意到我有兩個事件處理程序運行訂閱功能,一個在HTML表單中,一個在jquery.main.js中。我刪除了HTML中的一個,不再有這個問題。 –