ajax抓取网页内容(一个视图页面执行一个给评论点赞的功能,发现问题的根源)

优采云 发布时间: 2022-03-14 02:18

  ajax抓取网页内容(一个视图页面执行一个给评论点赞的功能,发现问题的根源)

  有这样一个例子,在thinkPHP视图页面上执行点赞评论功能。为了增强用户体验,一般使用ajax异步请求在后台处理同类数据。页面成功后,就可以执行本地更新的数据了。前台一般使用jquery,通过执行jquery的ajax方法来完成任务请求更加简单方便。

  简要描述出现问题的场景

  tinkPHP在应用路由后在视图页面执行ajax,并没有正常返回数据。以下代码描述了将评论 ID 获取到 ajax 请求的过程。根据后台处理规则,cmthot 方法会将一个更新后的 post-like 数据(数据)返回给前台。

  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);

            },

        });

    }

  就是这样,和like数据没有正常返回,报错。通过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改成链接直接提交了。返回的结果都是正常的,即后端控制器和模型都正常,没有错误。问题应该仍然在ajax上。

  因为这种操作方式,我经常在网站的后台使用,一般不会报错,所以又去后台对比一下同样的功能。后台类似的功能都是正常的。

  为了找出问题的原因,我比较了网站的正反两面的区别。唯一明显的是前台为了用户体验使用路由,简化了url。后台使用iframe框架,url固定为frame页面的地址,所以当时没有使用路由。

  方便找到差异然后出错。第一段代码中请求的地址不存在,因为它是路由的。此处需要添加路由地址,所以只需添加一个斜杠即可。url:"{:url('/cmthot')}",

  最后是因为一个斜线,返回了一个html的页面,所以要小心。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线