为什么即使调用成功,Jquery $ .ajax也会在函数调用时触发所有statusCode

Bac*_*ice 3 javascript ajax jquery

嘿家伙我有一个简单的Jquery ajax函数调用,看起来像这样.

function getUsers(){
    var jqxhr = $.ajax({
        url: "../assets/js/data/users.json",
        type: "GET",
        cache: true,
        dataType: "json",
        statusCode: { 
            404: handleError404("Error at getUsers();"),
            500: handleError500("Error at getUsers();")
        },
        success: function (data) {
            $.each(data, function(index, element) {
                console.log(element.name);
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

错误句柄函数看起来像这样.

function handleError500(customMsg){
    alert("Oops, there was an error: 500");
    console.log("ERROR: 500 | "+customMsg);
}

function handleError404(customMsg){
    alert("Oops, there was an error: 404");
    console.log("ERROR: 404 | "+customMsg);
}
Run Code Online (Sandbox Code Playgroud)

由于一些奇怪的原因,即使在成功调用没有任何错误500或404的情况下,statusCode函数也会被触发.

有任何想法吗?谢谢.

Mar*_*.io 5

这是一个常见的Javascript问题,但你实际上是firing关闭这些功能!

() 之后名称将实际调用该函数.

404: handleError404() // <-- it calls it immidiately
Run Code Online (Sandbox Code Playgroud)

你需要做的,是创建一个匿名函数,将被称为在错误实际发生时,这里面它会调用你的函数.

    statusCode: { 
        404: function () { // <-- anonymous function won't get called until it needs to
            handleError404("Error at getUsers();")
        },
        500: function () { 
            handleError500("Error at getUsers();")
        }
    },
Run Code Online (Sandbox Code Playgroud)

旁注:如果你没有将参数传递给你的函数,你实际上可以省略匿名函数 function () { /* function call */ } 部分,只需调用你的函数!

statusCode: {
    404: handleErrors, // since no parameters are passed, this could be done
    500: handleErrors
}
Run Code Online (Sandbox Code Playgroud)

  • mcpDESIGNS在我能够:-)之前得到了这个,为了进一步说明,当你想将statusCode.404设置为函数`handleError404`返回的值时,你会做`404:handleError404()`.所以当然它必须执行函数来返回值(在上面的例子中,没有返回任何内容) (2认同)