使用jquery ajax加载脚本:奇怪的行为?

时间:2013-06-04 01:28:01

标签: jquery ajax

在使用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/)是在我第一次加载SUCCESSFULLY的foo.js文件中定义的。

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

你能看到问题吗?

P.S:抱歉我的坏,贫穷和丑陋的英语..

奇怪的部分:

当页面和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

任何线索?

1 个答案:

答案 0 :(得分: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) ) );
            });
    });
});