[英]Ajax success function not working with returned json data and status 200/304
[英]AJAX Success function if there is no returned JSON data
我知道这很简单,但我正在努力做到这一点。 我正在使用jQuery / AJAX从数据库中检索一些数据(JSON)。 然后,我有一个成功函数来显示数据。 这工作正常,但如果没有返回结果,我想提醒用户。
我的PHP摘录,它编码JSON:
...
while($row = $result->fetch_all())
{
$returnResult = $row;
}
echo json_encode(['result' => $returnResult, 'errors' => $errors]);
....
我的JSON数据格式如下所示:
{"result":[["Grade 12","Studies","John","Doe"]],"errors":false}
然后,我的jQuery使用JSON数据并显示在html元素中:
function getworkload(){
$.ajax({
type: "POST",
url: "modules/getworkload.php",
dataType: 'json',
data: {id:id},
cache: false,
})
.success(function(response) {
if(!response.errors && response.result) {
$.each(response.result, function( index, value) {
$("#divwork").append('<li class="list-group-item"><b>'+value[0]+'</b> : '+value[1]+'</li>');
$("#spnname").html('<b>'+value[2]+' '+value[3]+' Workload </b>');
});
} else {
$.each(response.errors, function( index, value) {
$('input[name*='+index+']').addClass('error').after('<div class="errormessage">'+value+'</div>')
});
}
});
}
我试图用以下内容替换if(!response.errors && response.result) {
if(!response.errors && response.result=null) {
if(!response.errors && !response.result) {
if(!response.errors && response.result.length < 1) {
而不是在JSON中传递错误false,而是抛出404或500之类的HTTP错误代码。然后,您可以在JavaScript中放置一个error部分,而不是在success部分中进行检查。
假设返回的JSON如下所示,
{"result":[["Grade 12","Studies","John","Doe"]],"errors":false}
您只需要放置一个条件即可检查result
长度是否为0
。
像这样,
if(!response.errors && response.result) {
$.each(response.result, function( index, value) {
$("#divwork").append('<li class="list-group-item"><b>'+value[0]+'</b> : '+value[1]+'</li>');
$("#spnname").html('<b>'+value[2]+' '+value[3]+' Workload </b>');
});
} else if(!response.errors && response.result && response.result.length==0) {
// Handle 0 result output here...
} else {
$.each(response.errors, function( index, value) {
$('input[name*='+index+']').addClass('error').after('<div class="errormessage">'+value+'</div>')
});
}
您的代码无法将php
文件中的json值正确解析为javascript
,因此您必须先解析json
然后才能在javascript
使用
function getworkload(){
$.ajax({
type: "POST",
url: "modules/getworkload.php",
dataType: 'json',
data: {id:id},
cache: false,
})
.success(function(response) {
console.log(response);
var res = JSON.parse(response);
console.log(res);/* console json val*/
if(!res.errors && res .result) {
$.each(res.result, function( index, value) {
$("#divwork").append('<li class="list-group-item"><b>'+value[0]+'</b> : '+value[1]+'</li>');
$("#spnname").html('<b>'+value[2]+' '+value[3]+' Workload </b>');
});
} else {
$.each(res.errors, function( index, value) {
$('input[name*='+index+']').addClass('error').after('<div class="errormessage">'+value+'</div>')
});
}
});
}
让服务器在没有结果的情况下,例如返回单词“无”和代码分割到三个案例,如果结果,如果错误,如果没有
if(isset($returnResult) && $returnResult!=null){
echo json_encode('result' => $returnResult);
}
else if (isset($errors) && $errors!=null){
echo json_encode('errors'=>$errors);
}
else { echo "nothing";}
检查成功功能上的响应是否正确
.success(function(response) {
if(response=='nothing'){
alert('nothing');
}
else {
//rest of the success function
}
另一个建议是在成功函数中使用此if语句
.success(function(response) {
if(!response.result && !response.errors){
alert('nothing');
}
else {
//rest of the success function
}
要么
.success(function(response) {
if(response.result==null && response.errors==null){
alert('nothing');
}
else {
//rest of the success function
}
在您的PHP脚本中,将echo json_encode...
更改为
echo json_encode(['result' => (count($returnResult)) ? $returnResult : 0, ...]);
然后在您的JS中做
if(!response.errors && !!response.result) {...
只需在第一行在success()中使用JSON.parse(responce)
,然后使用它即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.