【发布时间】:2017-10-24 16:32:33
【问题描述】:
我正在使用 AJAX 发送电子邮件,它有效,电子邮件被发送给我的收件人。但是我不明白为什么尽管发送了电子邮件,但 AJAX 的 success 回调没有被触发。而是触发error 回调。
显然这不是 CORS 问题,因为我在 AJAX 的 url 参数中使用相同的服务器。此外,Google 开发工具未报告任何问题并显示 200 OK。
JS代码:
$(document).ready(function(){
$(".js-validate-2").validate({
ignore: ":hidden",
rules: {
//something
},
messages: {
//something
},
submitHandler: function(form) {
var recipient = "myEmailTest@gmail.com"
var specifiedProduct = "PRODUCT: " + $('#specifiedProduct').val();
var msg = $('#msg').val();
var phone = "TEL: " + $('#phone').val() + ". ";
var params = {
"email": recipient,
"subject": specifiedProduct,
"body": msg + phone,
};
var sendingToSupport = $.ajax({
url: 'http://myServer/u/support/message',
data: JSON.stringify(params),
type: 'POST',
dataType: 'json',
contentType: 'application/json',
success: function(data) {
console.log("Huge success");
console.log(params);
console.log(data);
alert("Successfully sent!");
},
error: function(data) {
console.log("Huge failure");
console.log(params);
console.log(data);
alert("We apologize for an error!");
$(".support-form").find("input[type=text], textarea").val("");
}
});
}
})
})
【问题讨论】:
-
返回的数据是合法的json吗?
dataType: 'json'说你期望它是,jQuery 会尝试以这种方式解析它,如果它无效或提供,它将出错并运行错误回调。 -
error处理程序将在响应 HTTP 代码不成功时触发,即。外面status >= 200 && status < 300 || status === 304。如果响应的格式不能被反序列化,它也会被触发。在您的情况下,如果响应不是有效的 JSON,就会发生这种情况。 -
@Taplar 你说得对,谢谢。
-
: Function( jqXHR jqXHR, String textStatus, String errorThrown )记录errorThrown,它会告诉你问题。
标签: javascript jquery ajax jquery-validate