如何处理getJSON的空返回

时间:2010-06-13 18:30:56

标签: javascript jquery

好的,所以我有一个PHP脚本从DB获取结果,并获得这些结果我使用jQuery脚本通过getJSON拉取结果。它工作得很好但是现在我想做一些事情,如果php脚本没有返回任何结果(空)。

我试过了:

$.getJSON('path/to/script'), {parameter:parameter}, function(data){
 if (data) {
  alert('Result');
 } else {
  alert('Empty);
 }
});

但这并不好。我尝试了不同的东西,如if(data.length),但仍然没有。我注意到如果没有返回的数据,回调将永远不会触发。那么如果是这种情况,我该如何处理空回报?

5 个答案:

答案 0 :(得分:7)

您应该检查PHP输出以始终输出一些数据。

在我的代码中,我为输出添加了一个成功标志,如下所示:

$result = array (
 'success' => true,
 'data' => $data
);
echo json_encode($result);

如果我没有输出任何内容,我会将false设置为成功,这样可以通过data.success轻松验证jQuery:

示例:

$.getJSON('path/to/script', {parameter:parameter}, function(data){
 if (data.success) {
  alert('Result');
 } else {
  alert('Empty');
 }
});

如果您不想修改输出,可以设置ajaxError来捕捉您的阅读问题。

示例:

$.ajaxError(function() {
 alert('error triggered');
});

P.S。:我不知道在这一行的末尾是否缺少'

alert('Empty);
你的原版中确实遗漏了

,如果是的话,你错过了';-)>>

alert('Empty');

答案 1 :(得分:2)

$.getJSON('json.php?',function(r){

                try {
                    typeof(r[0].city);
                } catch (e) { return false; /* or do somthing */  } 
 [...]

答案 2 :(得分:0)

根据documentation,如果您对回复一无所知,.getJSON会给您null。但是,如果您传递{}这样的内容,最终会得到一个object,其中没有.length这样的属性,并且true将被视为if 1}}条件。

如果你需要识别一个空对象,可能会有一个更短的方式,但此刻发生的是:

var isEmpty = true;
for (var p in data) { isEmpty = false; break; }
// at this point, if isEmpty should tell you if 'data' is an empty object

这个糟糕的代码可以假设data是object类型。

答案 3 :(得分:0)

以下是我如何处理JS从PHP获取数据的空响应!

response.php

if (check parameters from script.php) {
    $result  = $con->query(sqlAll($con)); // 'sqlAll()' returns a query like 'SELECT * FROM table'
    $arrData = array(); $i = 0; $tot = array(); $empty = ''; // '$empty' we'll use for empty response

    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {

           // fill array
           $arrData = array (
                'title'  => $row["post_title"],
                'author' => $row["post_author"]
            );

            $tot[$i] = $arrData; // collect data from '$arrData'
            $i++;
        }

        // tell PHP to become 'JSON-MASTER'
        header('Content-type: application/json');

        echo json_encode($tot); // transfer response to script.php
    }
    else echo json_encode($empty);

的script.php

$('#search_txt').keyup(function(){ // instant search
    $.getJSON('response.php', {
        // some parameters to be sent
        },

        function(data){
            var row = "";
            $.each(data, function(key, val) {  
             row +=
                 '<h2>'+
                 '<a href="#">'+val.title+
                 '</a></h2>'+
                 '<p class="lead">'+
                 'by <a href="index.php">'+val.author+'</a>'+
                 '</p>';
            });

        $('.box').html(row); // display result to the page
        }
    )
});

答案 4 :(得分:0)

这对我有用:

return json_encode([]);

因此,jQuery 成功处理程序将响应视为空数组:

$.getJSON("/url", function(data) {            
    console.log("data.length: " +  data.length); //  data.length: 0
}