Javascript 如何处理getJSON的空返回
好的,我有一个php脚本,它从数据库中获取结果,为了获得这些结果,我使用jQuery脚本通过getJSON获取结果。它工作得很好,但现在我想做一些事情,如果php脚本没有返回任何结果(空) 我试过: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); } }); 但这不好。我尝试过不同的方法,
$.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对象)。第二个代码块似乎缺少一个(在某些地方,最后一个代码块似乎不匹配)。对不起,我对语言不是很精通,所以匹配所有类型的括号非常有用