404/not/found 2019-02-16 11:44 采纳率: 0%
浏览 446
已采纳

IIS下thinkphp datatable AJAX请求报404错误

问题描述:

    本地开发环境WAMPServer,thinkphp3.2.2,php版本5.6.25。项目部署到服务器时,发现服务器环境是IIS,php版本7。部署到服务器后,_订单页面_的datatable插件进行ajax请求时报404错误,_其他页面_的datatable插件进行ajax请求是正常的。
    订单页面的js是从其他正常页面copy过来修改的,应该没错,而且我把本地php版本换成7后,只修改了数据库连接类型为mysqli,就完全正常,基本排除代码问题和php版本问题。
    **此外直接访问ajax请求地址是正常的。**

    贴下报错信息

请求报错

图片说明

图片说明

图片说明

jqury报错

以下是ajax请求的indexController下的datatable_order()方法。

public function datatable_order(){
            $data = $_REQUEST;
            $start = isset($data['start']) ? $data['start'] : 0;
            $end = isset($data['length']) ? $data['length'] : 10;

            $sn = isset($data['STAFF_NAME']) ? $data['STAFF_NAME'] : '';
            $si = isset($data['STAFF_ID']) ? $data['STAFF_ID'] : '';            
            $et = isset($data['EXCHANGE_TYPE']) ? $data['EXCHANGE_TYPE'] : '';
            $gi = isset($data['GOODS_ID']) ? $data['GOODS_ID'] : '';
            $ic = isset($data['IS_CANCEL']) ? $data['IS_CANCEL'] : '';


            $sql = "1=1 ";

            if($sn!='') {
                $sql .= "AND xs.sname LIKE '%$sn%' ";
            }
            if($si!='') {
                $sql .= "AND xo.userid LIKE '%$si%' ";
            }
            if($et!='') {
                $sql .= "AND xo.ostatus = '$et' ";
            }
            if($gi!='') {
                $sql .= "AND xo.gid LIKE '%$gi%' ";
            }
            if($ic!='') {
                $sql .= "AND xo.otype = '$ic' ";
            }

            $xo = M('xgqc_order xo');
            $rs = $xo->field('xo.*,xs.sname,xs.sphone,xd.dname,xg.gtitle')
                     ->join('left join xgqc_staff xs on xo.userid=xs.userid')
                     ->join('left join xgqc_dept xd on xs.sdept=xd.did')
                     ->join('left join xgqc_goods xg on xo.gid=xg.gid')
                     ->where($sql)
                     ->limit($start,$end)
                     ->order('xo.create_time desc')
                     ->select();

            $res = array();
            $index = 1;
            foreach ($rs as $k=>$v){
                $row = $v;
                $row['INDEX'] = $index;
                $index++; 
                $res[] = $row;     
            }

            $rs = $xo->join('left join xgqc_staff xs on xo.userid=xs.userid')
                     ->join('left join xgqc_dept xd on xs.sdept=xd.did')
                     ->join('left join xgqc_goods xg on xo.gid=xg.gid')
                     ->where($sql)
                     ->count();
            $total = 0;
            if($rs){
                $total = intval($rs);
            }

            echo json_encode(
                array(
                    'iTotalRecords'=>intval($end), //本次加载记录数量
                    'iTotalDisplayRecords'=>$total, //总记录数量
                    'aaData'=> $res                    
                )
            );
        }
  • 写回答

2条回答 默认 最新

  • 404/not/found 2019-03-29 16:56
    关注

    IIS导致的问题。请求url长度超过服务器规定的限制。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 毕文峰 2019-02-16 11:54
    关注

    前台ajax一直报404,后台方法断点根本进不去,搞了好久,百思不得其解。

    参数的console.log和报错信息如下:

    ajax方法如下:

    $.ajax({
    type: 'POST',
    url: "${ctx }/manage/submitPublicClass",
    /* dataType: "json", */
    data :$('#publicClassId').serialize(),
    success: function(result) {
    if(toPage==0){
    //保存则跳转列表页
    location.href="${ctx}/manage/publicClassListByPage";
    }else if(toPage==1){
    //预览则跳转预览页

    location.href="${ctx}/manage/toUpdatePublicClass?id="+result.msg;
    }
    },error:function(result){
    }
    })

    后台方法如下:

    @RequestMapping("/manage/submitPublicClass")
    @ResponseBody
    public Response submitPublicClass(PublicClassInsertVo publicClassInsertVo,Long fileId){
    .......
    return res;
    }

    vo类如下:

    @Data
    public class PublicClassInsertVo implements Serializable {

    private static final long serialVersionUID = 1L;
    private PublicClass publicClass;
    private List<PlanAuthority> planAuthorityList;
    private String[] planOrCourseId; //学习计划或基础课程ID
    private String type; //学习计划或基础课程
    private String studyPlanName; //学习计划名称
    private String studyPlanDescription; //学习计划描述
    

    }

    最后进去chrome的network看参数才发现:

    这个地方的select选择值居然是“请选择”!!!!后台接受参数肯定报错了。

    前台这个select框是这样写的:


    请选择
    selected/c:if>1
    selected/c:if>2

    请选择那个下拉框没有写value属性,若被选中则值就是“请选择”,所以出错了。

    应修改为

    请选择

    作者:宣午刚001
    来源:CSDN
    原文:https://blog.csdn.net/xuanwugang/article/details/80249835
    版权声明:本文为博主原创文章,转载请附上博文链接!

    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 咨询第六届工业互联网数据创新大赛原始数据
  • ¥15 Pycharm无法自动补全,识别第三方库函数接收的参数!
  • ¥15 STM32U575 pwm和DMA输出的波形少一段
  • ¥30 android百度地图SDK海量点显示标题
  • ¥15 windows导入environment.yml运行conda env create -f environment_win.yml命令报错
  • ¥15 这段代码可以正常运行,打包后无法执行,在执行for内容之前一直不断弹窗,请修改调整
  • ¥15 C语言判断有向图是否存在环路
  • ¥15 请问4.11到4.18以及4.27和4.29公式的具体推导过程是怎样的呢
  • ¥20 将resnet50中的卷积替换微ODConv动态卷积
  • ¥15 通过文本框输入商品信息点击按钮将商品信息列举出来点击加入购物车商品信息添加到表单中