ajax请求php返回的数据是整个页面的html,Ajax出错并返回整个页面html的问题
有這樣一個(gè)例子在thinkPHP視圖頁面執(zhí)行一個(gè)給評(píng)論點(diǎn)贊的功能,為了強(qiáng)化用戶體驗(yàn),一般都采用ajax異步請(qǐng)求后臺(tái)處理點(diǎn)贊數(shù)據(jù),成功后頁面執(zhí)行局部更新后的數(shù)據(jù)即可。前臺(tái)通常會(huì)用到j(luò)query,通過執(zhí)行jquery的ajax方法更加簡單方便的完成任務(wù)請(qǐng)求。
簡單描述下問題出現(xiàn)場(chǎng)景
tinkPHP在應(yīng)用路由后的視圖頁面執(zhí)行ajax,并沒有正常放回?cái)?shù)據(jù)。以下代碼描述了一個(gè)獲取評(píng)論ID,到ajax請(qǐng)求的過程。根據(jù)后臺(tái)處理規(guī)則,cmthot方法會(huì)返回一個(gè)更新的后點(diǎn)贊數(shù)據(jù)(data)返回到前臺(tái)。function?uphot(o){
var?cmtid=$(o).attr("cmtid");//獲取評(píng)論ID
$.ajax({
type:"post",
dataType:"json",
data:{cmtid:cmtid},
url:"{:url('cmthot')}",//請(qǐng)求地址
success:function(data){
$('#hot'+cmtid).html('?'+data);
},
});
}
這是就會(huì)出現(xiàn)這種情況,后面沒有正常返回點(diǎn)贊數(shù)據(jù),報(bào)錯(cuò)了。通過alert(data)可以看到這樣的情景。
再來看下后臺(tái)處理的部分public?function?updatehot()
{
if(request()->isAjax()){
$cmtid=input('cmtid');
$cmthot=model('comment')->cmthot($cmtid);
return?$cmthot;
}else{
$this->error('非法請(qǐng)求');
}
}
在上述代碼中通過控制器將ajax獲取的評(píng)論ID丟到模型(模型代碼就不貼了)去處理后拿到的新增后的點(diǎn)贊數(shù)返回給前臺(tái)。前臺(tái)(前述代碼)通過.html重寫了新的數(shù)據(jù)。
發(fā)現(xiàn)問題的根源出自路由
為了排錯(cuò),當(dāng)時(shí)就把a(bǔ)jax改成了a鏈接直接提交。返回的結(jié)果一切正常,也就是說后臺(tái)控制器和模型均正常,沒有錯(cuò)誤。問題應(yīng)該還是在ajax上。
因?yàn)檫@個(gè)操作方式我在網(wǎng)站后臺(tái)經(jīng)常使用,按說也沒有錯(cuò)誤,再次到后臺(tái)相同功能處比對(duì)。后臺(tái)類似功能一切正常。
為了找出問題出現(xiàn)的原因,就比較了下網(wǎng)站前后臺(tái)的差異。唯一明顯的就是前臺(tái)為了用戶體驗(yàn)動(dòng)用了路由,精簡了url。而后臺(tái)使用iframe框架,url固定是框架頁面的地址,所以當(dāng)時(shí)就沒有使用路由。
找到不同點(diǎn)再來差錯(cuò)就方便了,第一段代碼中請(qǐng)求的地址,因?yàn)楸宦酚闪?#xff0c;所以并不存在,這里需要補(bǔ)上路由后的地址,所以在補(bǔ)上斜杠即可。url:"{:url('/cmthot')}",
最終就因?yàn)橐粭l斜杠造成返回一頁的html,所以還是要仔細(xì)。
總結(jié)
以上是生活随笔為你收集整理的ajax请求php返回的数据是整个页面的html,Ajax出错并返回整个页面html的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab求矩阵中值函数,matlab
- 下一篇: java friendly 子包,黑馬程