【问题标题】:Show error message when no data with jquery ajax get当没有使用 jquery ajax 获取数据时显示错误消息
【发布时间】:2018-05-28 12:03:35
【问题描述】:

我开始学习 ajax。我有 API。 API 返回两种类型的响应 1.当我有数据和系统中没有数据时成功 2.服务器出错时报错(异常)。

在 API 文档中我有类似的内容

字段 - 成功 类型 - 布尔值 响应状态 - 真/假

字段 - 数据 类型 - 对象

在数据对象内部,我还有其他字段。我想做的很简单。系统中有数据时显示数据,无数据时显示错误信息。

根据文档,这是数据在系统中时的示例正确响应

{
"success": true,
"data": {
    "office_id": 1,
    "office_type": "s",
    "registrar_name": null,
    "registrar_mobile": null,
    "registrar_email": null
  }
}

并在系统中没有数据时正确响应

{"success": true}

{
    "success": true,
    "err": "error message"
}

这就是我此刻得到的。当它在系统中找到 mydata 时,它会正确显示字段。但是当系统中没有数据时,我得到了不确定。这段代码有什么问题?

$('#test').on('click', function(){
  $.ajax({
    dataType: 'json',
    type:"GET",
    url:"http://mywebsite.com/api/mydata",
    success: function(response, data) {
        console.log(data.data);
    },
    err: function(response, data) {
        console.log("no data");
    }
 });
});

【问题讨论】:

  • 那是因为当success == false 没有一个名为data 的属性,只有successerr。你在期待什么?
  • 这里:success: function(response, data) - 此回调函数仅将响应作为第一个参数,因此data 将在下一行中未定义。在此处删除data 将下一行更改为console.log(response.data);。但之前检查是否定义了 response.data
  • 试试看这个jsfiddle.net/Micio/kvusadfg你的代码问题是这样的:error not err

标签: javascript php jquery json ajax


【解决方案1】:

首先将您的成功函数更改为只有一个参数,根据the documentation,第二个参数(在本例中名为data)将是textStatus

然后您可以检查响应的属性以了解您是否有数据或响应是否有错误

success: function (response) {
    if (response.err != undefined) {
        console.log("Error");
    }

    if (response.data != undefined) {
        console.log("There is data");
    } else {
        console.log("No data")
    }
}

请注意,在您的示例数据中,有错误的响应仍然有success:true,这对我来说似乎有点傻,因为如果有错误它不应该成功。

【讨论】:

    【解决方案2】:

    你想要那个吗?

    success: function(response, data) {
        if(data.data == undefined)
        {
            //There is no data
        }
    }
    

    【讨论】:

    • 即使系统中有数据,它也会给我“无数据”消息
    • “如果系统中有数据”我不知道你的意思但是如果ajax请求导致错误,你应该检查端点,参数等。
    【解决方案3】:

    就我而言,通过循环,我解决了这样的问题:

    success: function(response) {
    
      if (response.length == 0) console.log('No data!');
    
      $.each(response, function (index, item) { 
    
       [...]
    
      }
    }
    

    【讨论】:

      【解决方案4】:

      当数据可用时使用

      {
      "success": true,
      "data": [{
          "office_id": 1,
          "office_type": "s",
          "registrar_name": null,
          "registrar_mobile": null,
          "registrar_email": null
        }]
      }
      

      当数据不可用时使用

      {
      "success": true,
      "data":[]
      }
      

      错误使用时

      {
      "success": false,
      "error": {code:"111",message:"Error message"}
      }
      

      在客户端

      检查如下

      success: function(response, data) {
              var retrivedData=[];
              if(data.success && data.data.length){
               retrivedData=data.data;//or use data.data[0]
               }else if(data.success && data.data.length==0){
                console.log("No DATA")
                }else {
                 console.log("Error in Data",data.error.message);
                 }
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-24
        • 2018-02-26
        • 2016-05-21
        • 2018-10-18
        • 2023-04-06
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        相关资源
        最近更新 更多