2010-04-05 71 views
3

我在这个问题中提出了一个问题Stackoverflow,它的工作原理是完美的。对所有给我答复的用户都是如此。但是现在我还有其他问题。加载Javascript对象文件

我想要在一个单独的文件中的对象,所以我只需要更新该文件而不是JS文件(否则它会很大)。我正在使用JQUERY。

我现在看起来像这样(所有的信息在JS文件中)。 IBANInfo被用于填充选择框

var IBANInfo = { 
    "ccAL":{ 
     countryCode:"AL", 
     countryName:"Albanië", 
     IBANlength:"28", 
     bankFormCode:"0 8n 0 ", 
     accountNum:"0 16 0 " 
    }, 
    "ccAD":{ 
     countryCode:"AD", 
     countryName:"Andorra", 
     IBANlength:"24", 
     bankFormCode:"0 4n 4n", 
     accountNum:"0 12 0 " 
    }, 
    "ccBE":{ 
     countryCode:"BE", 
     countryName:"België", 
     IBANlength:"16", 
     bankFormCode:"0 3n 0 ", 
     accountNum:"0 7n 2n" 
    } 
}; 
//---- then this function is used to build the selectList 
function createSelect(){ 
    var selectList = ''; 
    var key; 
    selectList  += "<option value=''>Kies een land</option>\n"; 
    for (key in IBANInfo) { 
     if (IBANInfo.hasOwnProperty(key)) { 
      var countryInfo = IBANInfo[key]; 
      selectList  += "<option value='"+countryInfo.countryCode+"'>"+countryInfo.countryName+"</option>\n"; 
     } 
    } 
    $('#selectBox').html(selectList); 
} 

我想我能做到这样,但我得到了我的选择框未定义的消息。

var IBANInfo = $.get('include/countryCodes.txt'); 

// also tried var IBANInfo = $.getJSON('include/countryCodes.txt'); 

//---- then this function is used to build the selectList 
function createSelect(){ 
    var selectList = ''; 
    var key; 
    selectList  += "<option value=''>Kies een land</option>\n"; 
    for (key in IBANInfo) { 
     if (IBANInfo.hasOwnProperty(key)) { 
      var countryInfo = IBANInfo[key]; 
      selectList  += "<option value='"+countryInfo.countryCode+"'>"+countryInfo.countryName+"</option>\n"; 
     } 
    } 
    $('#selectBox').html(selectList); 
} 

/* 
the countryCodes.txt file is like this: 
{ 
    "ccAL":{ 
      countryCode:"AL", 
      countryName:"Albani&euml;", 
      IBANlength:"28", 
      bankFormCode:"0 8n 0 ", 
      accountNum:"0 16 0 " 
     }, 
     "ccAD":{ 
      countryCode:"AD", 
      countryName:"Andorra", 
      IBANlength:"24", 
      bankFormCode:"0 4n 4n", 
      accountNum:"0 12 0 " 
     }, 
     "ccBE":{ 
      countryCode:"BE", 
      countryName:"Belgi&euml;", 
      IBANlength:"16", 
      bankFormCode:"0 3n 0 ", 
      accountNum:"0 7n 2n" 
     } 
    } 
*/ 

我在做什么错。 TNX提前

额外的信息: 我已经犯了一个网站来产生IBANnumbers,你可以找到它的iban.wswebcreation.nl。在这个网站上你可以生成1-100个IBAN号码。我想做的是一种验证用户想要验证的IBAN号码的方法。他可以通过在输入字段中填写IBANnumber来完成此操作(请参阅其他站点)。

如果你看到源文件,你会看到var IBANInfo在JS文件中。我想把它放在一个加载的单独的txt文件中。 IBANInfo包含使用IBANnumber的国家的所有信息(数字的数量,国家代码,帐户编号的构建方式等)。 我现在用一些帮助作为对象,看到前面问题的链接。这工作。但在将来我也想用IBANInfo来验证IBAN号码。

希望你现在有足够的信息

+0

如果您接受其他问题的一些答案,人们会更倾向于帮助您。 – 2010-04-05 07:47:26

+0

我如何接受答案?我是否需要回答我得到它的问题? – Megapool020 2010-04-05 08:04:51

+0

单击答案的投票计数下的复选标记。 – prodigitalson 2010-04-05 08:07:45

回答

2

编辑

为了让全球访问,你可以做这样的事情:

var IBANInfo = {}; 
$.getJSON('include/countryCodes.txt', function(json){ IBANInfo = $.extend({}, IBANInfo, data);}); 

您需要使用$.getJSON代替。另外,GET和POST方法不返回数据,因为他们需要工作异步,所以你实际工作中必须运行createSelect函数作为回调:

$.getJSON('include/countryCodes.txt', createSelect);

然后你createSelect需要至少需要一个参数这将是数据...因此,您的定义将如下所示:

function createSelect(IBANInfo){ /* your logic */} 
+0

好的,TNX。我会在今天晚些时候尝试(现在需要进行复活节爆发),但有一个问题。我没有给你所有的信息,对不起。 IBANInfo需要通过多个功能多次访问。如果我使用这个,纠正我,如果我错了我仍然是一个菜鸟,它将与createSelect功能相结合。我以后如何访问它? Tnx – Megapool020 2010-04-05 08:33:20

+0

好吧,你可能想重新考虑这个......如果多个函数需要使用它,你将如何知道对象何时可用(假设你不设置async为false)?如果您将async设置为false,那么使用单独的请求获取信息有什么意义? – prodigitalson 2010-04-05 14:00:54

+0

嗨prodigitalson,我添加了额外的信息给你解释我想要做什么。我也试过你的解决方案,但它没有奏效。我在你说/ *你的逻辑* /的地方发出警报,但没有显示。它看起来像或文件没有找到,或者该功能没有运行,因为别的东西是错的。 Firebug不会给出错误。是否有其他解决方案可以从可放入对象的文件中“加载”内容? – Megapool020 2010-04-05 14:51:57