如何使用AJAX调用加载边缘动画? jquery getScript失败

时间:2013-08-27 12:20:10

标签: jquery ajax yepnope adobe-edge

所以我试图通过jQuerys $ .getScript()检索Edge动画,这与使用dataType:script调用$ .ajax相同。

现在,如果我将脚本包含在脚本标记中,它可以正常工作,但是当我尝试通过$ .getScript()加载并执行脚本时,没有任何反应。 (我没有得到任何错误,脚本和子脚本都可以正常加载 - 但没有任何反应。)

以前有人试过这样做吗?我怀疑我在通过AJAX加载它时遇到问题,因为Adobe在page_a_edgePreload.js中使用了yepnope。

我使用了一个从Adobe Edge中发现的用于测试目的的简单示例。 如果您想在本地试用它 - 打开一个编辑器并将以下内容保存到wrapper.html文件中:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>Edge always wanted to be a Wrapper</title>
<style>
    .edgeLoad-PAGE_A { display:none; }
</style>
<script src="edge_includes/jquery-1.7.1.min.js"></script>
</head>
<body style="margin:0;padding:0;">
<H1>WRAPPER.HTML</H1>

<div id="content" class="PAGE_A">
   <p>EDGE animation composition should appear beneath me!</p>
</div>

<script type="text/javascript">
$.getScript("page_a_edgePreload.js", function(data, textStatus, jqxhr) {
   //console.log(data); //data returned
   console.log(textStatus); //success
   console.log(jqxhr.status); //200
   console.log('Load was performed.');
});
</script>
  <!--uncomment script below to see that it works if included regulary -->
<!--<script src="page_a_edgePreload.js"></script>-->
</body>
</html>

然后从Adobe下载示例.zip文件: http://blogs.adobe.com/edge/files/2012/05/an15BootStrapExample.zip

将以下内容解压缩到与wrapper.html相同的文件夹中:

  1. edge_includes文件夹
  2. page_a_edge.js
  3. page_a_edgeActions.js
  4. page_a_edgePreload.js

  5. 修改

    好的,所以我尝试加载文件而不经过Alex建议的edgePreloader.js。我可以访问AdobeEdge,但如果我在成功加载脚本后写出了合成,它会返回undefined:

    var comp = window.AdobeEdge.getComposition("PAGE_A");
    var stage = comp.getStage();
    console.log("Stage: " + stage);
    

    (我也尝试使用setTimeout()函数 - 仍然是相同的结果)

    如果我将脚本包含在常规<script src="..edgePreloader.js"></script>标记

    中,则以下工作正常
     setTimeout(function() {
      // Try getting the edge composition after 2 seconds
        var comp = window.AdobeEdge.getComposition("PAGE_A");
        var stage = comp.getStage();
        console.log("Stage: " + stage);
      }, 2000);
    

    我注意到Adobe在edgePreload.js上使用了闭包,似乎我必须在这个闭包中加载edge.1.5.0.js。我现在正试图了解这个闭包中必不可少的事件和特征,以使其正常工作。

2 个答案:

答案 0 :(得分:1)

您可能只想直接加载adobe边缘文件,而不是在预加载器中注入另一个预加载器。但是如果你只想用预加载器(例如yepnope)异步加载东西,那么像你已经注释掉的那样包含文件就是应该的工作方式。

如果你想将它切换为使用jQuery的getScript,你可以切换出yepnope特定的东西。不幸的是,preloader文件中有一堆,但我认为它是Adobe Edge的样板。当你不在一个例子中时,这就像是你要转出的东西。

所以你的行看起来像这样:

$.getScript("page_a_edgePreload.js", function(data, textStatus, jqxhr) {});

应改为:

$.getScript("edge_includes/edge.1.5.0.min.js", function(data, textStatus, jqxhr) {
  // AdobeEdge should exist now
});

预加载器看起来也像是进行了一些功能测试并设置了事件。如果你需要那些东西,你可以从文件的底部复制它。但是如果你知道在没有预加载器(你似乎想要避免)的情况下调用初始化相同的东西,那么你可以加载预加载器在这个例子中拉入的其他两个文件:

$.getScript("edge_includes/edge.1.5.0.min.js", function() {
  $.getScript('page_a_edge.js', function(){
    $.getScript('page_a_edgeActions.js', function(){
      // window.AdobeEdge should be fully available
    });
  });
});

确切的代码可能并不完全正确,但它应该是正确的想法。

答案 1 :(得分:0)

我不是一个javascript专家,但我在同一个网站上多次使用Edge Animate的问题似乎至少相似。也许我可以通过我发现的链接以及我使用的内容做出一点贡献,如下所示:http://www.tricedesigns.com/2012/07/12/using-adobe-edge-animations-as-components/我的工作(部分)在这里:prevent Adobe Edge preload.js file from loading jquery我也想知道为什么Edge必须加载jquery在准备好之前,即使它已经在主页面中。