【问题标题】:Check if JSON's response is empty检查 JSON 的响应是否为空
【发布时间】:2012-12-13 14:31:06
【问题描述】:

我正在通过 JSON 从 MySQL 获取一些数据。但是我想定位响应是否为空,如果它不为空,我会显示返回的信息,否则我会显示一条消息。

我尝试了多种可能的解决方案,例如检查 JSON 响应的长度,检查项目严重性是否存在,如果不存在则假定它为空等。

这是我的代码的 sn-p:

var data = $.ajax({
    type: 'GET',
    url: 'http://www.mydomain.com/php/loaddata.php?&jsoncallback=?',
    dataType: 'JSONp',
    timeout: 5000,
    success: function(data) {
        $.each(data, function(i,item){
            if (item.Severity == 1) {   
                // Do Something
                .....

当 JSON 找到数据时,回复是这样的: 更新:

([{"Severity":"1","Latitude":"35.872883","Longitude":"14.449133","Address":"Some Address 1","Heading":"25","Timestamp":"2012-12-28 10:15:03"},{"Severity":"2","Latitude":"35.871269","Longitude":"14.501580","Address":"Some Address 2","Heading":"80","Timestamp":"2012-12-28 10:15:31"}]);

如果没有找到数据,则返回 JSON:

([]);

【问题讨论】:

  • 你检查过 data.length 吗?
  • @ryadavilli 是的,但是它不起作用。我试过 if (data.length === 0)
  • 你需要否定那个表达式
  • 那么,如果数据为空,究竟会返回什么? (console.log(typeof data, data);)
  • 这很奇怪。如果你得到一个空数组,数据实际上是一个长度为 0 的数组。

标签: php javascript jquery json jsonp


【解决方案1】:

因为:Console.log 返回了"string"user1809790
这应该工作:

success: function(data) {
    if (data != '' && data !== null) { // Check if the data's not an empty string or null.
        $.each(data, function(i,item){
            if (item.Severity == 1) {
                // Do Something

【讨论】:

  • 我会将&& data !== null 添加到此解决方案中。当jQuery试图解析一个不是json的字符串时,它会返回null
【解决方案2】:

确保表达式被否定。

success: function(data) {
    if(data.length != 0){
        $.each(data, function(i,item){
            if (item.Severity == 1) {
                //Do something
            }
        });
    }
}

【讨论】:

    【解决方案3】:

    使用强制转换将让 js 引擎完成解析工作:

    if (""+data == "")
    {
    alert("Data is empty");
    }
    

    注意:只有空字符串或空数组(可以递归包含其他空字符串/数组)才能满足此条件,符合您的要求

    【讨论】:

    • 好的,我没有删除我的答案,如果您认为这不起作用,请解释原因。
    • 嗯,我认为将数据转换为字符串是检查它是否为空的一种非常丑陋的方法,特别是因为数据(响应)已经是一个字符串。
    • 我不这么认为,否则问题不准确:data = [{"key":"val"}];而不是 data = "[{\"key\":\"val\"}]";这绝对不一样。
    • 来自 php 的 (json) 结果始终是字符串。 (除非您返回图像等)
    • 好的,这与dataType有关,现在将dataType指定为“json”将使jQuery为您解析它(并返回解析的对象)。现在我假设“JSONp”的行为方式与“json”相同,根据文档(但从未尝试过)应该是这种情况:api.jquery.com/jQuery.getJSON
    【解决方案4】:

    ([]) 不是有效的 json,因此无法解析。 [] 是。

    这将引发语法错误:

    var json = "([])";
    var obj = JSON.parse(json);
    console.log(obj.length);
    

    虽然这正在工作并将输出 0:

    var json = "[]";
    var obj JSON.parse(json);
    console.log(obj.length);
    

    JSFiddle 在这里 - http://jsfiddle.net/m9LUm/1/

    【讨论】:

      【解决方案5】:

      检查这个sn-p

      var result="[]"; // this is your json string result
      var parsed=jQuery.parseJSON(result); //this is now an array! so we can check the length
      
      if(parsed.length==0)
          alert("Error")
      

      【讨论】:

      • 如果 JSON 结果是一个对象,这将不起作用。对象没有.length 属性。 (JSON 响应通常是对象)
      • 在他发布的两个示例中,都有数组,而不是对象,所以我假设我们只使用数组
      • @LucaTrazzi 在我的情况下,我需要把这段代码放在哪里?下成功函数? (对不起 - 我是这方面的 n00b :( )
      • 是的,但结果是你的数据 :)
      【解决方案6】:

      您将获得成功的数据是 JSON,所以首先您必须解析它,这样就可以了

      var x = jQuery.parseJSON(data) // this will give you array 
      if(x.length == 0) {
          alert("empty");
      }
      

      【讨论】:

      • @sourecode 我试过了,但它给了我一个错误:Uncaught TypeError: Cannot read property 'length' of null
      • 使用这个 A.splice(0, A.length) ,你也可以使用 stringyfy() 给你 emty string ,然后你可以检查一个空的
      猜你喜欢
      • 2015-12-24
      • 1970-01-01
      • 2019-01-23
      • 2021-08-12
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多