XMLHttpRequest无法为Instagram加载

时间:2014-05-06 11:56:56

标签: jquery url xmlhttprequest instagram

我想在Instagram上调用此链接,我正在使用以下代码,但它无效。出现以下错误,请帮助我如何从本地主机和服务器调用此URL。

var likeurl = "https://api.instagram.com/v1/media/" + idslist[1] + "/likes?ACCESS_TOKEN="    + accesstoken;
    Nextin_downloadData(likeurl);
    $.ajax({
        url: likeurl,
        type: 'POST',
        data: {

        },
        success: function (result) {
            alert("out" + result);


        },

        error: function () {
            alert("error");
        }
    });

Error : XMLHttpRequest cannot load       https://api.instagram.com/v1/media/714346267865083830_540073674/likes?  ACCESS_TOKEN=1281148571.506af84.fc2e95e7257fdhgu5thca. No 'Access-Control-Allow-Origin'   header is present on the requested resource. Origin 'http://localhost:2356' is therefore   not allowed access.

4 个答案:

答案 0 :(得分:8)

您可以使用jsonp:

在浏览器中执行此操作
$.getJSON(
        'https://api.instagram.com/v1/users/25025320/media/recent/?client_id=YOUR CLIENT ID&callback=?',
        function(data) {
            console.log(data);
        }
    );

注意添加callback=?

答案 1 :(得分:3)

不幸的是,这是Instagram方面的限制。因此,您应该使用服务器端查询。浏览器阻止跨域请求,因为在返回时没有Allow-origin标头。 我建议您阅读有关CORS的更多信息,以便完全理解这个问题。

例如,如果你正在使用PHP后端,这就是解决方案:

后端:

<?php
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL,"https://api.instagram.com/v1/media/" . $_REQUEST['id'] ."/likes?ACCESS_TOKEN=" .$_REQUEST['token']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'out'.$_REQUEST['data']);
// grab URL and pass it to the browser
curl_exec($ch);
// close cURL resource, and free up system resources
curl_close($ch);

前端:

$.ajax({
    url: "path.to.backend.php",
    type: 'POST',
    data: {
        id:idslist[1],
        token:accesstoken,
        data:{}
    },
    success: function (result) {
        alert("out" + result);
    },

    error: function () {
        alert("error");
    }
});

答案 2 :(得分:1)

只需在请求结束时添加&callback=?即可。

答案 3 :(得分:0)

您正在被服务器拒绝,因为您正在尝试跨域(从域A呈现的页面调用域B),并且托管此API的服务器不允许这样做。这些保护措施已经到位,以防止恶意的js代码做到这一点。

由于这是一个服务器设置,你确定这些api是要从Instagram.com外面调用的吗?