ajax可以向控制器post方式传递数据,并返回。
JS端代码
$('#send-btn').click(function(){ $username=$('input[name="username"]'); $content=$('textarea[id="content"]') if(!$username.val()){ alert('账号不能为空!'); $username.focus(); }else{ if(!$content.val()){ alert('内容不能为空!'); $content.focus(); } } $.post(url,{username:$username.val(),content:$content.val()},function(data){ if(data.status){ alert('发布成功'); $('#close').click(); }else{ alert('发布失败'); } },'json'); })
返回后执行function方法 $.post第一个参数的地址,第二个参数是要传递的参数,第三个是返回执行的方法,第四个是返回类型
控制器端代码
$content= $_POST['content']; $data=array( 'username'=>I('username'), 'content'=>I('content'), 'time'=>time(), ); if(M('wish')->data($data)->add()){ $data['content']=phiz_replace($data['content']); $data['time']=date('Y-m-d H:i:s',$data['time']); $data['status']=1; $this->ajaxReturn($data,'json'); }else{ $this->ajaxReturn(array('status'=>0),'json');
ajaxReturn第一个参数要传递的信息,可以是数组,第二个是类型,可以通过配置Thinkphp设置不同的类型
/** * 表情替换 */ function phiz_replace($content){ preg_match_all('/[.*?]/is',$content,$arr); if($arr[0]){ $phiz=F('phiz','','./Public/'); foreach ($arr[0] as $value) foreach ($phiz as $k=>$v){ if($value==$v){ $content=str_replace($v,'<img src="/blog/App/Home/View/Public/Images/phiz/'.$k.'.gif"/>',$content); } } } return $content; }
preg_match_all正则匹配,在第二个参数中找和第一个参数类似的内容,存放在第三个参数中,按数组形式存放,第四个参数如果是PREG_PATTERN_ORDER,
则$arr[0]保所
以匹配到的结果,$arr[1]保持匹配到的第一个字组,$arr[2]保持第二个,以此类推,如果第四个参数是
PREG_SET_ORDER
,则$arr[0]保持第一个,$arr[1]保持第二个,以此类推。
F方法是Thinkphp的缓冲方法,第一个参数是文件名,第二个参数为空则是读取数据,不为空则是要存入的内容,'./Public'为根目录下的Public文件,也就是工程名下的内容,
str_replace:把第三个参数中的所以和第一个参数相同的内容换成第二个