【问题标题】:E-mail sucessfully sent via AJAX POST but error callback triggered instead of success callback通过 AJAX POST 成功发送电子邮件但触发了错误回调而不是成功回调
【发布时间】: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


【解决方案1】:

所以,问题是由以下代码引起的:

dataType: 'json',

表示 AJAX 调用返回的数据将采用 JSON 格式。因此 jQuery 会尝试解析这些数据。

就我而言,删除此代码有助于成功发送 AJAX 调用并返回正确答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2014-12-28
    • 2012-05-04
    • 2018-12-23
    相关资源
    最近更新 更多