从没有jsonp的其他域获取数据(json格式)

时间:2013-12-11 04:11:18

标签: javascript jquery ajax json

如何从其他域获取数据(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");
    });
 });
});

3 个答案:

答案 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