多个AJAX请求冻结浏览器

时间:2012-05-22 15:06:54

标签: jquery html ajax cors

在页面加载时,我正在制作两个AJAX请求:一个用于从Youtube频道中提取最新视频,另一个用于从博客中提取最新帖子。两个脚本都正常工作。

无论出于何种原因,我都无法在任何浏览器(Chrome,Firefox,Safari和Opera)中对其进行测试。请求太大了吗?在使用Chrome时,我一直遇到CORS支持问题(至少这是我认为的情况),因此博客请求无法在那里工作并完全抵消视频请求(它不起作用)。

以下是我在Chrome中的Javascript Dev控制台中遇到的错误:

  

XMLHttpRequest无法加载http://devingraham.blogspot.com/rss.xml。 Access-Control-Allow-Origin不允许使用null。

如果我改变......

var tmp = $(this).find("content:first").text();

...只是找到“标题:第一”而不是它在Safari中渲染没有冻结。如果我将其保留在内容并加载页面,我可以看到帖子加载得很好,但页面冻结并且不会加载视频。那么也许它太多了?我知道一个事实,我所拉的帖子很长,但它会导致任何问题似乎很愚蠢。所以你有什么想法吗?

这是脚本:

<script type="text/javascript" charset="utf-8">

    $(function() {
          $.ajax({
            type: "GET",
            url: "http://gdata.youtube.com/feeds/base/users/devinsupertramp/uploads?orderby=updated&alt=rss&client=ytapi-youtube-rss-redirect&v=2",
            dataType: "xml",
            success: parseVideo
          });
          $.ajax({
            type: "GET",
            url: "http://devingraham.blogspot.com/rss.xml",
            dataType: "xml",
            success: parseBlog
          });
    });

    function parseVideo(xml) {
        $(xml).find("item:first").each(
            function() {
                var tmp = $(this).find("link:first").text();
                tmp = tmp.replace("http://www.youtube.com/watch?v=", "");
                tmp = tmp.replace("&feature=youtube_gdata", "");
                tmp2 = "http://www.youtube.com/embed/" + tmp + "?autoplay=1&controls=0&rel=0&showinfo=0&autohide=1";
                var iframe = $("#ytplayer");
                $(iframe).attr('src', tmp2);
            }
        );
    }

    function parseBlog(xml) {
        $(xml).find("entry:first").each(
            function() {
                var tmp = $(this).find("content:first").text();
                var post = $("#blog");
                post.append(tmp);
            }
        );
    }
</script>

1 个答案:

答案 0 :(得分:2)

默认情况下,由于同源策略,您无法进行跨域AJAX请求。

您可以解决此问题,但需要cooperation of the site on the other domain明确允许此类请求。

请参阅:Ways to circumvent the same-origin policy