如果没有返回的JSON数据,则为AJAX Success函数

时间:2017-07-25 11:10:58

标签: javascript php jquery json ajax

我知道这很简单,但我正在努力做到这一点。我正在使用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) {

  1. if(!response.errors && response.result=null) {
  2. if(!response.errors && !response.result) {
  3. if(!response.errors && response.result.length < 1) {

6 个答案:

答案 0 :(得分:0)

不要在JSON中传递错误false,而是抛出一个HTTP错误代码,如404或500.然后,您可以在javascript中放置一个错误部分,而不是检查成功部分。

答案 1 :(得分:0)

假设返回的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>')
                });
            }

答案 2 :(得分:0)

您的代码未正确解析从php文件到javascript的json值,您必须先解析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>')
                });
            }
        });
}

答案 3 :(得分:0)

让服务器返回单词&#39; nothing&#39;例如,如果没有结果,并将代码拆分为三种情况,如果结果和错误,如果没有

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
}

答案 4 :(得分:0)

在PHP脚本中,将echo json_encode...更改为

 echo json_encode(['result' => (count($returnResult)) ? $returnResult : 0, ...]);

然后在你的JS中完成

if(!response.errors && !!response.result) {...

答案 5 :(得分:-1)

只需在第一行使用JSON.parse(responce)成功(),然后再使用它。