【问题标题】:AJAX fires both success and errorAJAX 触发成功和错误
【发布时间】:2015-02-09 15:53:46
【问题描述】:

我不确定为什么我的 ajax 请求的 error: 部分也会触发。成功和错误部分实际上都在触发。我对 JS/jQuery 很陌生,但我读到当 ajax 请求成功时会触发成功,而当出现错误时会触发错误。我假设成功意味着 200,错误意味着 400-500?

js:

    function create_post() {
        console.log("create post is working");
        var firstName = document.getElementById("firstname");
        var lastName = document.getElementById("lastname");
        var email = document.getElementById("email");
        var phoneNumber = document.getElementById("phonenumber");
        var message = document.getElementById("message");
        var contactInfo = {
            "first_name": firstName.value,
            "last_name": lastName.value,
            "email": email.value,
            "phone_number": phoneNumber.value,
            "message": message.value
        };

        $.ajax({
            url: "",
            type: "POST",
            data: contactInfo,
            success: ajaxSuccess(contactInfo),
            error: console.log("ajax fail")

        });
    };


    function ajaxSuccess(contactInfo) {
        console.log(contactInfo);
        // clear form data
        document.getElementById("contact-form").reset();
        // display modal
    }


//    Contact form submit
    var contactForm = document.getElementById("contact-form");
    $(contactForm).on('submit', function(event) {
        event.preventDefault();
        console.log("form submitted");
        create_post();
    });

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    您的问题出在以下几行:

    success: ajaxSuccess(contactInfo),
    error: console.log("ajax fail")
    

    这有效地立即运行这两个函数,并将这些函数的返回值设置为successerror 属性。尝试使用匿名回调函数。

    success: function() {
        ajaxSuccess(contactInfo);
    },
    error: function() {
        console.log("ajax fail");
    }
    

    【讨论】:

    • 感谢您的帮助。但是,现在我的代码总是运行成功部分。但我目前没有让我的后端返回任何状态代码,所以这可能是问题所在。什么返回码会导致错误部分触发?我假设 400s-500s?
    • @Liondancer url: "" 将导致它再次请求当前页面,该页面可能存在并以成功状态代码响应。
    • 这是正确答案。 Success 和 Error 应该是函数。错误回调函数返回三个参数:jqXHRtextStatuserrorThrown,可用于将错误传达给用户。
    【解决方案2】:

    您正在调用函数并将它们的返回值传递给successerror。你需要传递实际的函数。

    由于在这两种情况下,您都在硬编码函数的参数,因此您可以使用 bind 创建新函数。

    success: ajaxSuccess.bind(window, contactInfo),
    error: console.log.bind(console, "ajax fail")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2023-04-03
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多