jquery+thinkphp实现跨域抓取数据的方法

jquery的$.post发送数据到服务器后台,在由后台的PHP代码执行远程抓取,存到数据库ajax返回数据到前台,前台用JS接受数据并显示。

//远程抓取获取数据

$("#update_ac").click(function() {

$username = $("#username").text();

$("#AC,#rank,#Submit,#solved,#solved2,#solved3").ajaxStart(function(){

$(this).html("<span class='loading2'> </span>");

});

$.post("update_ac/username/"+$username,{},function($data){

json = eval("(" + $data + ")");

$("#Submit").html(json.data.Submit);

$("#AC").html(json.data.AC);

$("#solved,#solved2,#solved3").html(json.data.solved);

$("#rank").html(json.data.rank);

}

),"json";

});

上面的jquery代码还算四楼比较清楚的,纠结我的就是那个json数据的接收

json = eval("(" + $data + ")");

//eval() 函数可计算某个字符串,并执行其中的的 javascript 代码。

其实这个都还是前台,跨域抓取是用php的扩展simple_html_dom完成的(不清楚的可以到网上去搜一搜,基于PHP5开发的)

把远程的页面抓取到本地。

import("@.ORG.simple_html_dom");

//thinkphp内导入扩展,你要把网上下载的代码改名为simple_html_dom.class.php放到APPNAME\Lib\ORG的目录下面

$html = file_get_html('http://openoj.awaysoft.com/JudgeOnline/userinfo.php?user='.$username); //远程抓取了

$ret = $html->find('center',0)->plaintext; //返回数据了。

如下所示:

<strong><span >/*编号=年份后两位+月份+id四位数*/

$id = $this->student_model->save(0, $data);

$sn = date('Y', time());

$sn = substr($sn, -2);

$sn.= date('m', time());

$sn.=sprintf("%04d", $id);</span></strong>