本地开发环境WAMPServer,thinkphp3.2.2,php版本5.6.25。项目部署到服务器时,发现服务器环境是IIS,php版本7。部署到服务器后,_订单页面_的datatable插件进行ajax请求时报404错误,_其他页面_的datatable插件进行ajax请求是正常的。
订单页面的js是从其他正常页面copy过来修改的,应该没错,而且我把本地php版本换成7后,只修改了数据库连接类型为mysqli,就完全正常,基本排除代码问题和php版本问题。
**此外直接访问ajax请求地址是正常的。**
贴下报错信息
以下是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
)
);
}
IIS导致的问题。请求url长度超过服务器规定的限制。
前台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
版权声明:本文为博主原创文章,转载请附上博文链接!