javascript - js跨域请求
$.ajax({
url : "http://apis.baidu.com/apistore/iplookupservice/iplookup?ip="+window.location.href,
beforeSend: function(request) {
request.setRequestHeader("apikey", "1f5cb934618472891347834b2bf64c8d");
},
type:"GET",
dataType : "jsonp",
success : function(data){
console.log(data);
}
});
js请求数据失败。
php成功,为什么?
$ch = curl_init();
$url = 'http://apis.baidu.com/apistore/iplookupservice/iplookup?ip='.$_SERVER['REMOTE_ADDR'];
$header = array(
'apikey:1f5cb934618472891347834b2bf64c8d',
);
// 添加apikey到header
curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
curl_setopt($ch , CURLOPT_URL , $url);
$res = curl_exec($ch);
$info = json_decode($res);
回复内容:
$.ajax({
url : "http://apis.baidu.com/apistore/iplookupservice/iplookup?ip="+window.location.href,
beforeSend: function(request) {
request.setRequestHeader("apikey", "1f5cb934618472891347834b2bf64c8d");
},
type:"GET",
dataType : "jsonp",
success : function(data){
console.log(data);
}
});
js请求数据失败。
php成功,为什么?
$ch = curl_init();
$url = 'http://apis.baidu.com/apistore/iplookupservice/iplookup?ip='.$_SERVER['REMOTE_ADDR'];
$header = array(
'apikey:1f5cb934618472891347834b2bf64c8d',
);
// 添加apikey到header
curl_setopt($ch, CURLOPT_HTTPHEADER , $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 执行HTTP请求
curl_setopt($ch , CURLOPT_URL , $url);
$res = curl_exec($ch);
$info = json_decode($res);
jQuery中type为jsonp的ajax是不允许自定义请求头的,虽然你在beforeSend里面加了自定义的头apikey,但是由于jsonp的实现是通过
建议:在服务器端做个接口,接口中直接访问百度的API,再把结果返回。
服务器返回的数据格式不对,不应该返回json,应该返回这种格式:
callback({你的json数据内容});
此类api不提供ajax查询 必须在http请求头添加一个指定值的apikey
你不是写明了 JSONP
请求么,那么返回的应该是 JavaScript
代码而非 JSON
数据。
问题还是跨域。
php可以,是因为百度服务端请求头里面设置apikey成功了,
javascript不可以,是因为跨域的规则没通过。 具体是,预请求options 从百度返回的http头部值Access-Control-Request-Headers:*,验证没通过,这一项要列出具体的值(比如apikey),不能是通配符。
参考 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#...
上一篇: 研究php开源源码的方法与技巧
推荐阅读
-
javascript - js跨域请求
-
用PHP做服务器转发层,解决js的ajax跨域访问问题
-
JavaScript中跨域调用Flash的方法_javascript技巧
-
WordPress 跨域请求 JSON 并保存在本地
-
fineuploader 跨子域上传文件 cookie丢失问题的解决 博客分类: JavaScript 学习vb2005xu自己动手系列 jsfineuploaderphpfile
-
fineuploader 跨子域上传文件 cookie丢失问题的解决 博客分类: JavaScript 学习vb2005xu自己动手系列 jsfineuploaderphpfile
-
nginx配置跨域请求 博客分类: iosnginxcordovaAndroid nginx
-
PHP、AJAX、JSONP实现跨域请求使用的代码实例
-
关于Jquery跨域请求php数据
-
AJAX跨域请求数据方法归纳(实战讲解)