如何从其他域获取数据(json格式)?
我的问题是:我想从以下网址获取数据:http://pin-codes.in/api/pincode/400001/
我曾尝试使用CORS,但它没有用。
我的控制台是:
GET http://pin-codes.in/api/pincode/400001 [HTTP / 1.1 200 OK 780ms]
错误错误
我的代码来自客户端脚本:
$(document).ready(function() {
$("#get_data_btn").click(function() {
var data_path = "http://pin-codes.in/api/pincode/400001";
$.getJSON(data_path, null)
.done(function(data) {
console.log("Success: " + data.status);
})
.fail(function(jqxhr, textStatus, error) {
console.log("Error Error");
});
});
});
答案 0 :(得分:3)
您可能不拥有其他域名吗?
没问题 。没关系,不管怎么说,计算一切都是好事!
只需在您的服务器上使用简单代理,或者查看YQL。
这个简单的查询将起作用:
select * from json where url="http://pin-codes.in/api/pincode/400001/ "
只需测试 this link (绕过跨域安全公牛$!!)。
它会将您请求的数据作为普通的普通json(无jsonp)数据包含在回调函数cbfunc
中。
查看this question以获取更多信息(我在SO上做了很多yql scrape答案)。
<强>更新强>
这是展示整个过程的粗略小提琴:所以你输入一个网址,点击抓取并观看魔术发生:http://jsfiddle.net/NbLYE/
function getJSON(url) { //quick and dirty
var script = document.createElement('script');
script.setAttribute('src', url);
script.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(script);
}
function cbfunc(json){ //the callback function
if(json.query.count){
var data=json.query.results.json;
// do your work here, like for example:
//document.getElementById('output').innerHTML=data.toSource();
} else {
alert('Error: nothing found'); return false;
}
}
function fetch(url){ //scrape the url you'd want
var yql="select * " +
" from json" +
" where url='" + url + "';";
yql="http://query.yahooapis.com/v1/public/yql?q=" +
encodeURIComponent(yql) +
"&format=json" +
"&callback=cbfunc";
getJSON(yql);
}
这应该让你开始(并且激励它简单)。
希望这有帮助!
答案 1 :(得分:1)
您的服务器上没有正确的CORS标头。
您需要添加
Access-Control-Allow-Origin: *
(或类似的)服务器端的响应。
编辑:从HTTP响应中,您似乎正在使用PHP。在回复中使用header功能。
<?php header('Access-Control-Allow-Origin: *'); ?>
答案 2 :(得分:1)
您无法使用jquery only
执行此操作,您可以使用server side script
之类的任何PHP
尝试使用php
,
<?php
echo file_get_contents('http://pin-codes.in/api/pincode/400001');
?>
将以上代码保存在 pincode.php 中并使用jquery
之类的,
$(document).ready(function() {
$("#get_data_btn").click(function() {
var data_path = "pincode.php";
$.getJSON(data_path, null)
.done(function(data) {
console.log("Success: " + data.status);
})
.fail(function(jqxhr, textStatus, error) {
console.log("Error Error");
});
});
});
另请阅读this