本文实例讲述了jquery+thinkphp实现跨域抓取数据的方法。分享给大家供大家参考,具体如下:
今天做一个远程抓取数据的功能,记得jquery可以用Ajax远程抓取,但不能跨域。再网上找了很多。但我觉得还是来个综合的,所以我现在觉得有点把简单问题复杂化了,但至少目前解决了:
跨域抓取数据到本地数据库再异步更新的效果
我实现的方式:jquery的$.post发送数据到服务器后台,在由后台的PHP代码执行远程抓取,存到数据库ajax返回数据到前台,前台用JS接受数据并显示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//远程抓取获取数据
$( "#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数据的接收
1
2
|
json = eval( "(" + $data + ")" );
//eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
|
其实这个都还是前台,跨域抓取是用php的扩展simple_html_dom完成的(不清楚的可以到网上去搜一搜,基于PHP5开发的)
把远程的页面抓取到本地。
1
2
3
4
|
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; //返回数据了。
|
上面的代码只是核心代码,simple_html_dom扩展的还有很多功能。自己去了解吧。
返回的数据是一个字符串,再用正则表达式去筛选需要的数据就了 下面是效果图
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。