簡體   English   中英

JQuery Uncaught (in promise) 錯誤回調

[英]JQuery Uncaught (in promise) on error callback

當 API 調用成功時,此函數會按預期執行,但如果發生類似 409 的錯誤,我會在控制台中收到 Uncaught (in promise) 錯誤。 這里的 JS 正在為注冊進行 API 調用。 我做錯了什么?
提前致謝。

注冊.js
這與 signup.html 組合在一起

$("#signup").click(async function(){
    let username     = $("#username").val();
    let password     = $("#password").val();
    let rePassword   = $("#re_password").val();
    let emailID      = $("#email_id").val();
    let phone        = $("#phone").val();
    let genderTypeId = $("#gender").val();
    let captchaId    = $("#captcha_pic").val();
    let captchaCode  = $("#captcha_code").val();

    try{
        verifyUsername(username);
        verifyPassword(password);
        
        if(password !== rePassword){
            const errorMessage = `Passwords not matching.`;
            throw { message: errorMessage };
        }
        verifyPhone(phone)
        verifyEmailID(emailID);
        verifyCaptchaCode(captchaCode);
    }catch(err){
        showError(err.message);
    }

    const apiResponse = await signup(username, password, phone, genderTypeId, emailID, captchaId, captchaCode);
    if(apiResponse[0] == true){
        window.location.replace("login.html");
    }else{
        const error = apiResponse[2].detail;
        showError(error);
    }
});

api.js
此文件包含與 API 通信的代碼

async function signup(username, password, phone, genderTypeId, emailID, captchaId, captchaCode){
    // Signup
    paramData = "username=" + username + "&password=" + password;
    paramData += "&captcha_id=" + captchaId + "&captcha_code=" + captchaCode;
    paramData += "&private_email_id=" + emailID + "&private_phone=" + phone;
    paramData += "&gender_type_id=" + genderTypeId;
    let dataToReturn = null;

    await $.ajax(await{
        type: "POST",
        url: BASE_URL + '/signup?' + paramData,
        beforeSend : function(xhr) { 
            xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); }, 
        success: function(data) {
            console.log('signup success');
            dataToReturn = [true, data];
        },
        error: function(jqXHR) {
            console.log('signup failed');
            dataToReturn = [false, jqXHR.status, jqXHR.responseJSON["detail"]];
            console.log(dataToReturn); // works fine
        },
    });
    console.log(dataToReturn); // not working
    return dataToReturn;
}

控制台日志:

gender_type fetch success api.js:533:21
signup captcha created api.js:573:21
signup executing signup.js:34:13
XHRPOSThttp://192.168.5.222:8000/signup?username=thinkkll&password=password&captcha_id=4e27e8d4-a9b0-4e0b-9caf-8336de48fedc&captcha_code=45303&private_email_id=sdf&private_phone=9495954685&gender_type_id=1
[HTTP/1.1 406 Not Acceptable 5ms]

signup failed api.js:125:21
Array(3) [ false, 406, "USERNAME_TAKEN" ]
api.js:127:21
Uncaught (in promise) 
Object { readyState: 4, getResponseHeader: getResponseHeader(key), getAllResponseHeaders: getAllResponseHeaders(), setRequestHeader: setRequestHeader(name, value), overrideMimeType: overrideMimeType(type), statusCode: statusCode(map), abort: abort(statusText), state: state(), always: always(), catch: catch(fn), … }
signup.js:41:18
async function signup(username, password, phone, genderTypeId, emailID, captchaId, captchaCode){
    // Signup
    paramData = "username=" + username + "&password=" + password;
    paramData += "&captcha_id=" + captchaId + "&captcha_code=" + captchaCode;
    paramData += "&private_email_id=" + emailID + "&private_phone=" + phone;
    paramData += "&gender_type_id=" + genderTypeId;
    let dataToReturn = null;

    try{
        await $.ajax(await{
            type: "POST",
            url: BASE_URL + '/signup?' + paramData,
            beforeSend : function(xhr) { 
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); }, 
            success: function(data) {
                console.log('signup success');
                dataToReturn = [true, data];
            },
            error: function(jqXHR) {
                console.log('signup failed');
                dataToReturn = [false, jqXHR.status, jqXHR.responseJSON];
            },
        });
    }finally{
        return dataToReturn;
    }
}
async function signup(username, password, phone, genderTypeId, emailID,
    captchaId, captchaCode) {
    // Signup
    paramData = "username=" + username + "&password=" + password;
    paramData += "&captcha_id=" + captchaId + "&captcha_code=" + captchaCode;
    paramData += "&private_email_id=" + emailID + "&private_phone=" + phone;
    paramData += "&gender_type_id=" + genderTypeId;
    let dataToReturn = null;
    try {
      const res = await getSignup(paramData);
      const data = await res.json();
      if (data.status !== 200) {
        // i don't know the format of your data response so you can change it 
        //depend response data format
        dataToReturn = [false, data.status, data.errors.detail]

      } else {
        dataToReturn = [true, data];
      }

    } catch (err) {
      alert(err);
    }

    function getSignup(paramData) {
      return $.ajax(await {
            type: "POST",
            url: BASE_URL + '/signup?' + paramData,
            beforeSend: function(xhr) {
              xhr.setRequestHeader("Content-Type", "application/x-www-form- 
                urlencoded;
                "); }, 

              });
          }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM