Javascript 如何处理getJSON的空返回

Javascript 如何处理getJSON的空返回,javascript,jquery,Javascript,Jquery,好的,我有一个php脚本,它从数据库中获取结果,为了获得这些结果,我使用jQuery脚本通过getJSON获取结果。它工作得很好,但现在我想做一些事情,如果php脚本没有返回任何结果(空) 我试过: $.getJSON('path/to/script'), {parameter:parameter}, function(data){ if (data) { alert('Result'); } else { alert('Empty); } }); 但这不好。我尝试过不同的方法,

好的,我有一个php脚本,它从数据库中获取结果,为了获得这些结果,我使用jQuery脚本通过getJSON获取结果。它工作得很好,但现在我想做一些事情,如果php脚本没有返回任何结果(空)

我试过:

$.getJSON('path/to/script'), {parameter:parameter}, function(data){
 if (data) {
  alert('Result');
 } else {
  alert('Empty);
 }
});
但这不好。我尝试过不同的方法,比如if(data.length),但仍然没有。我注意到,如果没有返回数据,回调将永远不会启动。因此,如果是这种情况,我如何处理空返回?

根据,如果您在响应中没有得到任何结果,
.getJSON
将为您提供
null
。但是,如果您正在传递{}之类的内容,那么最终将得到一个
对象
,该对象没有
.length
等属性,并且在
if
条件下,该对象将被视为
true

如果您需要识别空对象,可能有较短的方法,但此时出现的方法是:

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

假设
数据
是object类型,那么这段糟糕的代码就可以工作。

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

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

$result = array (
 'success' => true,
 'data' => $data
);
echo json_encode($result);
如果我没有输出任何内容,我会将false放入success,这样就可以通过data在jQuery中轻松验证。success:

例如:

$.getJSON('path/to/script', {parameter:parameter}, function(data){
 if (data.success) {
  alert('Result');
 } else {
  alert('Empty');
 }
});
$.ajaxError(function() {
 alert('error triggered');
});
如果您不想修改输出,可以设置ajaxError以捕获您的阅读问题

例如:

$.getJSON('path/to/script', {parameter:parameter}, function(data){
 if (data.success) {
  alert('Result');
 } else {
  alert('Empty');
 }
});
$.ajaxError(function() {
 alert('error triggered');
});
附言:我不知道这一行末尾是否遗漏了:

alert('Empty);
在你的原稿中真的缺失了,如果是,你缺失了一个“;-)>>


下面是我如何处理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
        }
    )
});
$('#search_txt').keyup(函数(){//instant search
$.getJSON('response.php'{
//要发送的一些参数
},
功能(数据){
var行=”;
$.each(数据、函数(键、val){
划船+=
''+
''+
“

”+ “由”+ “

”; }); $('.box').html(行);//将结果显示到页面 } ) });
您可能会发现它更有用,因此您可以处理更多选项,因为空结果不是有效的JSON,因此没有什么可解析的,因此您也没有什么可反应的。没错,我还意识到我可以返回一个JSON编码的空响应,然后通过回调进行检查。犯错误我真的需要开始仔细思考。你应该把它作为你问题的答案,其他人可能会遇到同样的问题。如果
成功
回调没有被触发,那么
错误
回调可能会被触发。应该是
for(var p in data){If(data.hasOwnProperty(p)){isEmpty=false;break;}
这还可以防止服务中断(根本不返回任何内容,甚至不返回空的JSON对象)。第二个代码块似乎缺少一个(在某些地方,最后一个代码块似乎不匹配)。对不起,我对语言不是很精通,所以匹配所有类型的括号非常有用