PHP获取ajax返回值长度的限制?

jxdyzwh 2017-03-11 12:02:46
各位大佬好,我的程序通过ajax来获取部门信息,发现返回的字符串长了,前台处理不了数据,这个是咋回事,程序VIEW的代码如下
function getCategory(hospital_id)
{
if (hospital_id!="")
{
alert(hospital_id);
$.ajax({
url:"index.php?s=/addon/Administrator/HospitalMember/ajaxHostpitalDepartment&v="+Math.random(),
data: {hospital_id:hospital_id},
type: "post",
dataType: "json",
success: function (data) {
var obj2 = eval(data);
alert(obj2.hospitalCategory);
$("#department_id").empty();
$("#department_id").append("<option value=''>请选择</option>");
$("#department_id").append(obj2.hospitalCategory);
}
})
}
}
服务端处理程序如下
function ajaxHostpitalDepartment()
{
$hospital_id=(int)trim($_POST['hospital_id']);
$hospitalDepartment=D('Hospital')->ajaxHospitalCategory("wp_guahao_hospital_department",0,0,'',$hospital_id);
$list = array(
'msg' => 100,
'hospitalCategory'=>$hospitalDepartment,
);
echo JSON ( $list );
}
当$hospitalDepartment返回的值太长了,前台显示不了,也没有报错提示,比如
{"msg":"100","hospitalCategory":"<option value='4' >内科临床部</option><option value='5' >   
; |--内分泌科</option><option value='8' >    |--血液病科</option><option value='9'
>    |--消化内科</option><option value='21' >    |--心血管内科</option
><option value='22' >    |--风湿病科</option><option value='23' >    
;|--小儿内科</option><option value='24' >    |--神经内科</option><option value='25' > 
;   |--肾脏病科</option><option value='10' >老年医学临床部</option><option value='11' >  
;  |--老年外科</option><option value='12' >    |--老年肿瘤内科</option><option value
='26' >    |--老年消化内科</option><option value='27' >    |--老年内分
泌科 </option>"}
中的hospitalCategory这个值过长,前台根本success: function (data) 这个函数根本进不来,如果返回的值是
{"msg":"100","hospitalCategory":"<option value='1' >普通外科</option><option value='2' >内分泌科</option><option
value='3' >神经内科</option><option value='13' >肾病内科</option><option value='14' >耳鼻咽喉科</option><option value
='15' >泌尿外科</option><option value='16' >中医肝病科</option><option value='17' >感染病科</option><option value
='18' >风湿免疫科</option><option value='19' >临床护理</option><option value='20' >肝脏病学科</option>"}
倒是可以正常显示,程序都一样,结果咋不一样呢,我初步怀疑是不是php.ini或apache配置出了问题,请各位大老如何处理这种问题
...全文
257 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2017-03-11
  • 打赏
  • 举报
回复
不是长度问题,看你firebug是返回成功的,数据完整。问题是出在你返回的html问题

1.你使用jquery dataType:JSON 所以不需要再 eval处理
2.你的php echo JSON 方法估计有问题。

js改这样

function getCategory(hospital_id)
{
if (hospital_id!="")
{
alert(hospital_id);
$.ajax({
url:"index.php?s=/addon/Administrator/HospitalMember/ajaxHostpitalDepartment&v="+Math.random(),
data: {hospital_id:hospital_id},
type: "post",
dataType: "json",
success: function (data) {
var obj2 = data;
alert(obj2.hospitalCategory);
$("#department_id").empty();
$("#department_id").append("<option value=''>请选择</option>");
$("#department_id").append(obj2.hospitalCategory);
}
})
}
}


php改这样

function ajaxHostpitalDepartment()
{
$hospital_id=(int)trim($_POST['hospital_id']);
$hospitalDepartment=D('Hospital')->ajaxHospitalCategory("wp_guahao_hospital_department",0,0,'',$hospital_id);
$list = array(
'msg' => 100,
'hospitalCategory'=>$hospitalDepartment,
);
//echo JSON ( $list );
header('content-type:application/json;charset=utf8');
echo json_encode($list,JSON_UNESCAPED_UNICODE);
}


正确返回的数据应该是

{"msg":"100","hospitalCategory":"<option value='4' >内科临床部<\/option><option value='5' >   \n; |--内分泌科<\/option><option value='8' >    |--血液病科<\/option><option value='9' \n>    |--消化内科<\/option><option value='21' >    |--心血管内科<\/option\n><option value='22' >    |--风湿病科<\/option><option value='23' >    \n;|--小儿内科<\/option><option value='24' >    |--神经内科<\/option><option value='25' > \n;   |--肾脏病科<\/option><option value='10' >老年医学临床部<\/option><option value='11' >  \n;  |--老年外科<\/option><option value='12' >    |--老年肿瘤内科<\/option><option value\n='26' >    |--老年消化内科<\/option><option value='27' >    |--老年内分\n泌科 <\/option>"}


你之前的返回数据没有转义

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧