我正在尝试检查数组的对象是否在jquery中包含空数据,但是它似乎不起作用。
如果数据库中存在传递的值,则返回数组值,但是如果传递的值不正确,则不会返回任何错误。
这是我到目前为止尝试过的:
PHP代码
if(isset($_POST['name'])){
$json = array();
$id = trim($_POST['name']);
$query = "SELECT regiNo, firstName, middleName, lastName FROM student WHERE regiNo = ?";
$statement = $mysqli->prepare($query);
$statement->bind_param('s', $id);
$statement->execute();
$statement->bind_result($rno, $fname, $mname, $lname);
while ($statement->fetch()){
$user=array('rno'=>$rno,'fname'=>$fname,'mname'=>$mname,'lname'=>$lname);
array_push($json,$user);
}
echo json_encode($json, true);
}
jQuery
<script>
$(document).ready(function(){
$(".Student_reg_code").blur(function () {
var id = $(".Student_reg_code").val();
var data = 'name=' + id;
$.ajax({
type: "POST",
url: "process.php",
data: data,
dataType: 'json',
success: function (data) {
if (data) {
for (var i = 0; i < data.length; i++) { //for each value in the json response
$(".Student_reg_code").val(data[i].id);
$(".regno").val(data[i].rno);
$(".lname").val(data[i].lname);
$(".mname").val(data[i].mname);
$(".fname").val(data[i].fname);
} // for
} // if
else {
alert('Empty value return for that'+ id);
}
} // success
}); // ajax
});
});
</script>
答案 0 :(得分:2)
由于json_encode
始终返回值; data
参数将始终是真实的。您可以使用以下表达式进一步测试返回的数据:
if (Array.isArray(data) && data.length) {
...
}
Array.isArray
将确定data
是否确实是一个数组,而data.length
将是您的真实/虚假,以确定其是否为空。
在JavaScript中,真实值是在以下情况下转换为true的值: 在
Boolean
上下文中进行评估。除非所有价值观都是真实的 定义为虚假(即false
,0
,""
,null
,undefined
和NaN
。
答案 1 :(得分:0)
测试数组是否为空的另一种方法是:
if(Array.isArray(data) && typeof data[0] !== 'undefined') {
console.log("We got an array");
}
与使用length属性相比,这有什么优点?好吧,如果您有一个非常大的数组,那么长度将必须迭代整个数组,而实际上不需要。