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