首页 > CMS > PhpCMS > 正文

解决PHPCMS使用getJSON调用的地址方法无效

2024-09-10 07:16:13
字体:
来源:转载
供稿:网友

今天遇到一个getJSON的问题,回调函数一直无法执行,检查了生成的json数据的格式绝对没问题,getJSON的js语法也没问题,但就是alert不出来传回的数据,原来是phpcms的check_hash()函数对远程调用的方法进行了安全验证,方法名前没public_的都不能通过,代码如下:

  1. /** 
  2.  * 检查hash值,验证用户数据安全性 
  3.  */ 
  4.  
  5. final private function check_hash() { 
  6.  if(preg_match('/^public_/', ROUTE_A) || ROUTE_M =='admin' && ROUTE_C =='index' || in_array(ROUTE_A, array('login'))) { 
  7.   return true; 
  8.  } 
  9.  if(isset($_GET['pc_hash']) && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_GET['pc_hash'])) { 
  10.   return true; 
  11.  } elseif(isset($_POST['pc_hash']) && $_SESSION['pc_hash'] != '' && ($_SESSION['pc_hash'] == $_POST['pc_hash'])) { 
  12.   return true; 
  13.  } else { 
  14.   showmessage(L('hash_check_false'),HTTP_REFERER); 
  15.  } 

phpcms给函数进行了hash验证,因此,现在方法是这样写的,代码如下:

  1. public function public_mobile_getjson_ids() {//publc是后来加上去的 
  2.  $modelid = intval($_GET['modelid']); 
  3.  $id = intval($_GET['id']); 
  4.  $this->db->set_model($modelid); 
  5.  $tablename = $this->db->table_name; 
  6.  $this->db->table_name = $tablename.'_data'
  7.  $r = $this->db->get_one(array('id'=>$id),'mobile_type'); 
  8.  
  9.  if($r['mobile_type']) { 
  10.   $relation = str_replace('|'','$r['mobile_type']); 
  11.   $relation = trim($relation,','); 
  12.   $where = "id IN($relation)"
  13.   $infos = array(); 
  14.   $this->mobile_db = pc_base::load_model ( 'mobile_type_model' ); 
  15.   $datas = $this->mobile_db->select($where,'id,type_name'); 
  16.   //$this->db->table_name = $tablename; 
  17.   //$datas = $this->db->select($where,'id,title'); 
  18.   foreach($datas as $_v) {//开源软件:Vevb.com 
  19.    $_v['sid'] = 'v'.$_v['id']; 
  20.    if(strtolower(CHARSET)=='gbk'$_v['type_name'] = iconv('gbk''utf-8'$_v['type_name']); 
  21.    $infos[] = $_v
  22.   } 
  23.   echo json_encode($infos); 
  24.  } 
  25. }  

js部分的getJSON是这样写的,代码如下:

  1. //显示添加机型 
  2. function show_mobiletype(modelid,id) { 
  3.  $.getJSON("?m=content&c=content&a=public_mobile_getjson_ids&modelid="+modelid+"&id="+id, function(json){ 
  4.   var newrelation_ids = ''
  5.   if(json==null) { 
  6.    alert('没有添加相www.111cn.net关文章'); 
  7.    return false; 
  8.   } 
  9.   $.each(json, function(i, n){ 
  10.    newrelation_ids += "<li id='"+n.sid+"'>·<span>"+n.type_name+"</span><a href='javascript:;' class='close' onclick="remove_relation('"+n.sid+"',"+n.id+")"></a></li>"
  11.   }); 
  12.  
  13.   $('#mobile_type_text').html(newrelation_ids); 
  14.  });  
  15. }  

就好了,要注意phpcms里面调用远程地址,方法前加上public啊.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表