views:

51

answers:

1

Hi there,

I asked a question in this thread Stackoverflow, and it works perfect. So tnx to all the users who gave me a reply. But now I have a other question.

I would like to have the object in a seperate file, so I only need to update the file in stead of the JS file (otherwise it will be very big). I'm using JQUERY.

I now looks like this (with all the info in the JS file). IBANInfo is used to fill a selectbox

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);
}

I thought I could do it like this, but I get the message undefined in my selectbox.

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"
        }
    }
*/

What am I doing wrong. Tnx in advance

Extra info: I already made a site to generate IBANnumbers, you can find it on iban.wswebcreation.nl. On this site you can generate 1-100 IBANnumbers. What I want to make is a way to validate an IBANnumber a user want to validate. He can do that by filling in the IBANnumber in a inputfield (see the other sites).

If you see the source file, you will see that var IBANInfo is in the JS file. I want to put it in a seperate txt file which is loaded. The IBANInfo holds all the info of the countries that use IBANnumber (the amount of digits, the countrycode, the way the accountnumber is build, and so on). I now made it with some help as an object, see link to former question. This works. But in the future I also want to use IBANInfo for validating the IBANnumber.

Hope you now have enough info

+1  A: 

EDIT:

To give global access you could do something like this:

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

You need to use $.getJSON instead. Also the get and post methods dont return the data because they need to work async, so you actuall have to run your createSelect function as the call back:

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

Then you createSelect needs to take at least one argument which will be the data... So your definition will look like:

function createSelect(IBANInfo){ /* your logic */}
prodigitalson
Ok, tnx. I'll try that later this day (need to have easter breakfest now), but 1 question. I didn't gave you all the info, sorry. The IBANInfo needs to be accessed multiple times by multiple functions. If I use this, correct me if I'm wrong I'm still a rookie, it will be combined with the createSelect funtion. How can I acces it later on? Tnx in advance
Megapool020
Well you may want to rethink this... if multiple functions need to use it how will you know when the object is actually available (assuming you dont set async to false)? If you do set async to false then whats the point of using a separate request to get the info?
prodigitalson
Hi prodigitalson, I added extra info for you to explain what I want to do. I also tried your solution, but it didn't work. I put an alert in the place you said /* your logic */, but it didn't show. It looks like that or the file isn't found, or the function isn't run because something else is wrong. Firebug doesn't give an error. Is there maybe an other solution to "load" content from a file that can be put in an object?
Megapool020
well you could just include it with a regular script tag.
prodigitalson