1. 程式人生 > >jQuery ajax一直呼叫error方法,問題解決

jQuery ajax一直呼叫error方法,問題解決

首先說原因,然後再說具體情況:
原因一:返回的json格式不對。
原因二:在返回資料之前不能有任何的輸出,包括開啟除錯。例如:後端用的是php,像在返回json資料之前,echo,var_dump等輸出是不能有的,debug也要關閉。

* 問題描述

實現功能:點贊功能
問題:在頁面點贊,並執行了後端的程式碼,但是前端一直呼叫error方法
下面貼出程式碼來說明該問題
前端程式碼:

$("#like").on("click",function(){
    var like_status = $("#like-status").html();
    var like_number = parseInt
($("#like-num").html()); $.ajax({ url:"../usercenter/clickLike", type:"POST", data: {"like_status":like_status,"like_cnt":like_number,"vid":video_id,"uid":user_id}, dataType:"json", success:function(data){ alert(data.error_code) if
(data.error_code == 0){ if(like_status == 0){ var num = Math.floor(Math.random() * 3 + 1); var index=$('.like').children('img').length; var rand = 20; $(".like").append("<img class='img-like1' src=''>"
); $(".like").append("<img class='img-like2' src=''>"); $('.img-like1:eq(' + index + ')').attr('src','http://videostyle.qyer.ad/img/ic_feed_like_sel.png'); $('.img-like2:eq(' + index + ')').attr('src','http://videostyle.qyer.ad/img/ic_feed_like_sel.png'); $(".img-like1").animate({ bottom:"300px", opacity:"0", left: rand },2000); $(".img-like2").animate({ bottom:"400px", opacity:"0", left: rand },2000); $("#like").removeClass("like-no"); $("#like").addClass("like-yes"); $("#like-status").html(1); $("#like-num").html(like_number+1); }else{ $("#like").removeClass("like-yes"); $("#like").addClass("like-no"); $("#like-status").html(0); $("#like-num").html(like_number-1); $(".img-like1").remove(); $(".img-like2").remove(); } }else{ alert(data.error_code); } }, error:function(data){ alert("錯誤"); } }); }).on("touchstart", function(event) { event.stopPropagation(); });

php端程式碼:

/**
 * 使用者點選喜歡,取消喜歡
 */
    public function clickLikeAction(){
        $uid = getRequestInt("uid");
        if(!$uid){
            json_error(1,"請先登入");
        }

        $vid = getRequestInt("vid");
        $like_status = getRequestInt("like_status");
        $like_cnt = getRequestInt("like_cnt");
        if(!$vid){
            json_error(1,"vid未得到");
        }

        if(!$like_status ){//使用者沒有喜歡過才為其新增喜歡,並令喜歡量加1
            Table_Video_Vlike::inst()->addUserLike($uid,$vid);
            Table_Video_Statistics::inst()->increaseLikeCnt($vid,$like_cnt);
            json_success();

        }

        //取消喜歡,並令喜歡量減1
        Table_Video_Vlike::inst()->deleteUserLike($uid,$vid);
        $res = Table_Video_Statistics::inst()->decreaseLikeCnt($vid,$like_cnt);
        if(!$res){
            json_error();
        }
        json_success();
    }

其中json_success() ,json_error()是兩個封裝好的返回給前端的json格式的字串,但是在執行“點選喜歡”的時候,沒有任何問題,當點選“取消喜歡”的時候,資料庫的資料已修改,但是ajax一直呼叫error方法

* 問題解決

網上資料說是json資料格式不對,但是呼叫的是同一個函式,怎麼會json格式不對呢,面對上面的問題覺得很奇怪,後來發現我在decreaseLikeCnt() 這個方法中使用了 echo, 把這個註釋掉問題就解決了。另外一種情況,我開啟了資料庫除錯模式,也會出現ajax一直呼叫error方法。為什麼註釋掉就解決問題了呢?
原因分析: 前後端定義了資料的互動方式,前端預設後端返回的資料格式是一個json而且格式也是規定好的,現在在後端返回給前端資料時,echo或debug等都會導致前端接受不到定義好的json串,從而導致錯誤。