前台ajax請求php后台返回成功卻進error方法解決


  最近幾天一直都在解決error問題,周末都沒能好好過,悲痛萬分,想逃走😭.....

一、悲痛的開端

  項目用jQuery的ajax方法請求php后台,前台代碼寫的沒有問題,后台返回的json數據大概也是對的(猜的,后來驗證了json是對的),然后悲劇就如約而至;

  先看核心代碼:

              $.ajax({
                        type:"POST",
                        url:"{:U('City/adds')}",
                        data:{},
                        dataType: 'json',
                        success:function(data){if( data.status == 1 ){
                                layer.msg('成功* ̄▽ ̄*');
                                setInterval(function(){
                                    var index = parent.layer.getFrameIndex(window.name);
                                    parent.layer.close(index);
                                    window.parent.location.reload();
                                },1000)
                            }else{
                                layer.msg('失敗>﹏<');
                            }
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            //console.log(XMLHttpRequest.status);
                            //console.log(XMLHttpRequest.readyState);
                            //console.log(textStatus);
                        }
                    })        

  問題一:請求成功進入success方法,但出現下面的報錯,

 Uncaught SyntaxError: Unexpected token < in JSON at position 0

  翻一下Network面板,看到請求響應的數據是 <pre>array(3){...}</pre>  字符串,繼續忍...

  開始分析找解決辦法;

  報錯代碼是“JSON位置0處發現不能識別的標記<”,意思是說響應的數據不是json數據,那就各種各樣的方法試一試;

  先嘗試改前端代碼,不指定‘dataType’,在success中方法去掉<pre></pre>,發現就不會報錯了,但問題二來了;

  去掉<pre></pre>,用的是: jQuery(data).text()  

  問題二:請求成功但一直進入error方法,無任何報錯;

  

  Preview下是json數據,校驗無任何問題;

  Response下發現數據前面多了一個小紅點·,是數據的問題,ajax死活都不給解析,才一直進入error方法;

  然后跟后台商量,返回的數據有問題,需要注意下格式;

  我就去百度搜索啊,發現真是后台數據的問題,沒有注意過紅點問題;

  在后端返回數據前用方法ob_clean()清空輸出,返回的類型是Object,不再是String,由此成功~~

 二、開心的結局,啰嗦聊幾句

  問題一和問題二都能在后台用ob_clean()完美解決。

  問題一是在前台解決,但對於數據量多的情況並不適用,所以慎用;

  可以讓后台嘗試 echo json_encode($data,true);  echo json_encode($obj,JSON_UNESCAPED_UNICODE);  或者自己來~ 方法多種多樣,總有適合的一個;

echo json_encode($data,true);  
echo json_encode($obj,JSON_UNESCAPED_UNICODE); 

  總結問題一和問題二,都是一個問題引出  -> Json數據不夠嚴謹,導致前台解析出錯。

  Json數據不夠嚴謹就更得說了,例如一個全角和半角的空格、單雙引號出現的{k:v}、json中的注釋語句等一些細小的問題都會引起;

  如果大家也遇上了同樣的問題,但不能用同樣的方式解決,一定要找各方面的原因,不要局限於ajax代碼部分有沒有寫錯,后台給的確實是json,而是去找類型/解析/書寫/空傳值等情況分析,不同代碼不同分析方式;

  最后硬要說是誰的鍋,不好講,還是需要前端和后台一起配合才更好更快的完成😘。

  記錄一下此次的解決過程,感謝大家~😘

  

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM