一、使用js获取接口数据的方法
①$get(url,[data],[callback])
url:请求的地址;data:请求数据的列表;callback:请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个为服务器的状态,是可选参数。
其中服务器返回数据的格式其实是字符串形式,并不是我们想要的JSON数据格式。上例子:
②$post(url,[data],[callback],[type])
post方法中多了一个type:获取数据的类型格式,post其实和get是一样的用法,type不定义,返回的是字符串类型的,定义为json格式,返回的就是json格式的数据,此处可以仿照上面的get方法,把get改成post就搞定了,就不多说了。
③$ajax(opiton)
④$getJSON(url,[data],[callback])
此处参数和get方法是一致的,直接上例子:
以上类型因为接口访问时没有带参数,所以[data]这个参数我都省去了。如果有参数的话,格式为:
{id : 'Robin',password: '123456',gate : 'index'}
二、跨域问题的解决
在使用以上方法获取接口数据的过程中,我们突然发现有些接口无法将数据获取展示出来,使用chrome浏览器调试,我们发现报错如图:
此处我们使用设置Access-Control-Allow-Origin来实现跨域访问。
在被请求的Response header中加入
// 指定允许其他域名访问header('Access-Control-Allow-Origin:*');// 响应类型header('Access-Control-Allow-Methods:POST');// 响应头设置header('Access-Control-Allow-Headers:x-requested-with,content-type');
这样就可以实现ajax的跨域访问。
此处贴上示例代码以帮助大家上手,例HTML代码:
<?php$ret = array('name' => isset($_POST['name'])? $_POST['name'] : '','gender' => isset($_POST['gender'])? $_POST['gender'] : '');header('content-type:application:json;charset=utf8');header('Access-Control-Allow-Origin:*');header('Access-Control-Allow-Methods:POST');header('Access-Control-Allow-Headers:x-requested-with,content-type');echo json_encode($ret);?>
这里Access-Control-Allow-Origin:*表示允许任何域名跨域访问。
如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名