代码之家  ›  专栏  ›  技术社区  ›  user2896120

如何在400个错误请求后返回JSON数据

  •  1
  • user2896120  · 技术社区  · 6 年前

    HTTP 400 Bad Request
    Allow: POST, OPTIONS
    Content-Type: application/json
    Vary: Accept
    {
        "username": [
            "Username already taken."
        ],
        "email": [
            "This field may not be blank."
        ],
        "password1": [
            "This field may not be blank."
        ],
        "password2": [
            "This field may not be blank."
        ]
    }
    

    console.log(send_data(register_url, data));
    
    function send_data(url, data) {
        return $.ajax({
            url: url,
            type: 'POST',
            data: data,
            success: function (data) {
            },
    
            error: function (xhr) {
            }
        });
    }
    

    当我调用函数时,我会检索所有数据。像这样:

    abort: ƒ (e)
    always: ƒ ()
    catch: ƒ (e)
    done: ƒ ()
    fail: ƒ ()
    getAllResponseHeaders: ƒ ()
    getResponseHeader: ƒ (e)
    overrideMimeType: ƒ (e)
    pipe: ƒ ()
    progress: ƒ ()
    promise: ƒ (e)
    readyState: 4
    responseJSON: {email: Array(1), password1: Array(1), password2: Array(1)}
    responseText: "{"email":["This field is required."],"password1":["This field is required."],"password2":["This field is required."]}"
    setRequestHeader: ƒ (e,t)
    state: ƒ ()
    status: 400
    statusCode: ƒ (e)
    statusText: "Bad Request"
    then: ƒ (t,r,i)
    __proto__: Object
    

    但是,当我这样做时:

    let resp = send_data(register_url, data);
    console.log(resp.responseJSON);
    

    我明白了 undefined

    2 回复  |  直到 6 年前
        1
  •  0
  •   EugenSunic    6 年前

    要显示数据,请仅使用ajax中指定的回调(成功或错误),而不要使用其他方式。当然,您可以使用Promissions或async task es 7特性,但我发现您依赖于jquery库。

    function send_data(url, data) {
        return $.ajax({
            url: url,
            type: 'POST',
            data: data,
            success: function (data) {
               console.log('received data', data);
            },
            error: function (xhr) {
             console.log('Error occured, proceed with some logic')
            }
        });
    }
    

    send_data(url, data) {
        return $.ajax({})
    }
    
        2
  •  0
  •   ewwink    6 年前

    $.ajax 是异步还是不等待完成以继续下一个操作,这就是为什么 undefined console.log(resp.responseJSON);

    function send_data(url, data, callback) {
      return $.ajax({
        url: url,
        type: 'POST',
        data: data,
        success: callback,
        error: callback
      });
    }
    
    function ajaxCallback(data, status, jqXHR) {
      //if (status == "success") {}
      //else {}
      resp = jqXHR;
      console.log(resp.responseJSON);
    }
    
    let resp;
    send_data(register_url, data, ajaxCallback);