簡體   English   中英

如果沒有返回的JSON數據,則使用AJAX成功函數

[英]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) {

  1. if(!response.errors && response.result=null) {
  2. if(!response.errors && !response.result) {
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM