Javascript 为什么我会看到这个getJSON错误

Javascript 为什么我会看到这个getJSON错误,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我正在尝试与一起使用,但不断出现以下错误: XMLHttpRequest cannot load http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=MY_API_KEY&page_limit=5&q=t&format=jsonp. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 我的代码如下所示:

我正在尝试与一起使用,但不断出现以下错误:

XMLHttpRequest cannot load http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=MY_API_KEY&page_limit=5&q=t&format=jsonp. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
我的代码如下所示:

    var autocomplete = $('#searchinput').typeahead()
    .on('keyup', function(ev){

        ev.stopPropagation();
        ev.preventDefault();

        //filter out up/down, tab, enter, and escape keys
        if( $.inArray(ev.keyCode,[40,38,9,13,27]) === -1 ){

            var self = $(this);

            //set typeahead source to empty
            self.data('typeahead').source = [];

            //active used so we aren't triggering duplicate keyup events
            if( !self.data('active') && self.val().length > 0){

                self.data('active', true);

                $.getJSON("http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=API_KEY_REMOVED&page_limit=5",{
                    q: $(this).val()
                }, function(data) {


                    //set this to true when your callback executes
                    self.data('active',true);

                    //Filter out your own parameters. Populate them into an array, since this is what typeahead's source requires
                    var arr = [],
                        i=data.movies.length;
                    while(i--){
                        arr[i] = data.movies[i].title
                    }

                    //set your results into the typehead's source 
                    self.data('typeahead').source = arr;

                    //trigger keyup on the typeahead to make it search
                    self.trigger('keyup');

                    //All done, set to false to prepare for the next remote query.
                    self.data('active', false);

                });

            }
        }
    });

知道是什么导致了这个错误吗?

看起来您使用的URL无效,违反了同源策略

您必须将AJAX请求发送到相同的

这是你想要的真实url,还是你只是从他们的网站上复制的

同一原产地政策
关于:

在计算中,同源策略是许多浏览器端编程语言(如JavaScript)的重要安全概念。该策略允许在源于同一站点的页面上运行的脚本访问彼此的方法和属性,而不受特定限制,但阻止跨不同站点的页面访问大多数方法和属性。


出于安全考虑,不允许跨浏览器调用。请参见,要么您必须创建一个代理,让您的代理调用跨域并返回结果,要么如果其他域的服务器支持,您可以使用您看到此错误是因为Ajax请求(基本上是xhrXML)不允许跨域通信。如果你真的想从其他域访问资源,那么你可以使用隐藏的iframe从其他域获取内容。它非常简单,甚至在引入ajax之前就已经被使用了

欲了解更多信息,请阅读此 (请仅浏览iframe部分)


但我要提醒你的是,某些网站不允许你在iframe中显示这些内容,例如twitter。它们的标题中有X-Frame-Option,可防止在iframe中显示页面。所以,首先检查您正试图使用iframe获取的资源的头。

使用iframe获取JSONP和跨域请求的解决方案


抱歉,上面的答案返回了一个403禁止与烂番茄api


将其更改为&callback=?而不是?回调=?它在localhost上适当地返回JSON对象

可能相关:看起来它们支持jsonp。我可以简单地将该格式添加到我的getJSON查询中吗?@Paul尝试将
?callback=?
放在url的末尾,如果支持jsonp,它应该可以工作http://api.rottentomatoes.com/api/public/v1.0/movies.json?apikey=API_KEY_REMOVED&page_limit=5?callback=?",{
Paul的第一条注释表明它是受支持的,您是否尝试了第三条注释中的代码…我的内存确实不好,现在不记得了…尝试插入?回调=?在控制台中给我一个
GET 403(禁止)
结果。
$('input.typeahead').typeahead [
    remote: {
        url: 'http://remote-server.com/results.json?query=%QUERY&callback=?',
        dataType: 'jsonp'
    },
    minLength: 2