好的,所以我有一个PHP脚本从DB获取结果,并获得这些结果我使用jQuery脚本通过getJSON拉取结果。它工作得很好但是现在我想做一些事情,如果php脚本没有返回任何结果(空)。
我试过了:
$.getJSON('path/to/script'), {parameter:parameter}, function(data){
if (data) {
alert('Result');
} else {
alert('Empty);
}
});
但这并不好。我尝试了不同的东西,如if(data.length),但仍然没有。我注意到如果没有返回的数据,回调将永远不会触发。那么如果是这种情况,我该如何处理空回报?
答案 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
}