0

在使用 jquery 加载 ajax 脚本时,我遇到了一些奇怪的行为。当我在我的计算机上本地运行此页面时,一切都很好,当我在线(在 DropBox 上)运行它时,它无法加载说(在控制台上)引用错误:sjcl 未定义。

这是页面(及其脚本):

<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>Pack Résidanat — par @Anonyme</title><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body>
<font face="monospace"><div id="status"></div></font>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function(){
  $("#status").append("Chargement du décrypteur... ");
  $.ajax({
    url:"http://dl.dropboxusercontent.com/s/5tsysv6hmneaxop/foo.js",
    type:"GET",
    dataType:"script",
    success:function(data){
      $("#status").append("[OK]<br/>Chargement de la clé de cryptage... ");
      $.ajax({
        url:"http://dl.dropboxusercontent.com/s/70d5avb1s7s7shd/crkey.js",
        type:"GET",dataType:"script",
        success:function(data){
          $("#status").append("[OK]<br/>Chargement du pack... ");
          $.ajax({
            url:"http://dl.dropboxusercontent.com/s/nxxpecpdci9gtbd/pack.js",
            type:"GET",
            dataType:"script",
            success:function(data){
              $("#status").append("[OK]<br/>Décryptage du pack...<br/>");
              $("#status").fadeOut("slow",function(){document.write(unescape(sjcl.json.decrypt(crkey,pack)));});
            },
            error:function(data){
              $("#status").append("[ERROR]<br/>Erreur lors du chargement du pack.");
            }
          });
        },
        error:function(data){
          $("#status").append("[ERROR]<br/>Erreur lors du chargement de la clé de cryptage.");
        }
      });
    },
    error:function(data){
      $("#status").append("[ERROR]<br/>Erreur lors du chargement du décrypteur.");
    }
  });
});
</script>
</body></html>

这是在线版本:http ://dl.dropboxusercontent.com/s/5o3r2bfknw93h62/pack.html

sjcl(Stanford Javascript Crypto Library http://crypto.stanford.edu/sjcl/)是在我第一次成功加载的 foo.js 文件中定义的。

foo.js 全局使用严格模式(“使用严格”)。

你能看出问题吗?

PS:对不起我的英语不好,可怜和丑陋..

奇怪的部分:

当页面和 foo.js 文件托管在同一台服务器上时,它无法加载 jquery ajax 说“成功”:

http://dl.dropboxusercontent.com/s/5o3r2bfknw93h62/pack.html http://copy.com/kqIL8nF0WQjX/pack2.html

当它们托管在不同的服务器上时,它可以正常工作(一个在 Dropbox 中,另一个在 Copy.com 中):

http://copy.com/tkGTmnJlJxS3/pack.html http://dl.dropboxusercontent.com/s/q3cnv2qdc7vjirh/pack2.html

有什么线索吗?

4

1 回答 1

0

尝试类似的东西怎么样:

$(function(){
    var stat = $("#status");
    stat.append("Chargement du décrypteur... ");
    $.when(
        $.getScript("http://dl.dropboxusercontent.com/s/5tsysv6hmneaxop/foo.js").fail(function() {
            stat.append("[ERROR]<br/>Erreur lors du chargement du décrypteur.");
        })
    ).then(function() {
        stat.append("[OK]<br/>Chargement de la clé de cryptage... ");
        return $.getScript( "http://dl.dropboxusercontent.com/s/70d5avb1s7s7shd/crkey.js" ).fail(function() {
            stat.append("[ERROR]<br/>Erreur lors du chargement de la clé de cryptage.");
        });
    }).then(function() {
        $("#status").append("[OK]<br/>Chargement du pack... ");
        return $.getScript( "http://dl.dropboxusercontent.com/s/nxxpecpdci9gtbd/pack.js" ).fail(function() {
            stat.append("[ERROR]<br/>Erreur lors du chargement du pack.");
        });
    }).then(function() {
        stat.append("[OK]<br/>Décryptage du pack...<br/>")
            .fadeOut("slow",function(){
                document.write( unescape( sjcl.json.decrypt(crkey,pack) ) );
            });
    });
});
于 2013-06-04T02:15:06.530 回答