2016-07-31 3 views
0

Может ли кто-нибудь помочь мне со следующим. У меня есть 2 JSON файлы:Несколько вызовов JSON File

  1. names.json: который имеет все возраста имена и адреса массива (упаковывают Mulitple жительства) каждого человека. { "people": [ { "name":"Peter Gabriel", "age":42, "address": ["location1","location2","location3"] }, { "name":"Mark Vincent", "age":"25", "address": ["location4","location5"] } ] }

  2. data.json: который имеет все детали адреса { "location1": { "country":"Switzerland", "street":"some Avenue", "number": 32 }, "location2": { "country":"Latvia", "street":"some Street", "number": 43 }, "location3": { "country":"Denmark", "street":"some Road", "number": 16 }, "location4": { "country":"Austria", "street":"some Avenue", "number": 54 }, "location5": { "country":"Poland", "street":"some Avenue", "number": 23 } } мне нужно данные data.json файл, чтобы быть в глобальной и загружены до names.json, но, как JSON загрузки является асинхронной функцией, как сделать Я делаю это.

    var jsonAddressData = []; 
    function main() 
    { 
        loadNamesJSON(function(response) { 
         jsonAddressData = JSON.parse(response); 
        }); 
    
    
        loadNamesJSON(function(response) { 
         var jsonPeopleData = JSON.parse(response); 
         var addressDetail=[]; 
    
         for(var i in jsonPeopleData.people){ 
          // ACCESS ADDRESS OBJECT DETAILS HERE 
          for(var j in jsonPeopleData.people[i].address){ 
           if (jsonPeopleData.people[i].address[j] in jsonAddressData){ 
    
            addressDetail.append(jsonAddressData[jsonPeopleData.people[i].address[j]]) 
           } 
          } 
         } 
        }); 
    } 
    
    function loadNamesJSON(callback) { 
        var request = new XMLHttpRequest(); 
        request.overrideMimeType("application/json"); 
        request.open('GET', 'names.json', true); 
    
        request.onreadystatechange = function() { 
         if (request.readyState === 4 && request.status ===200) { 
          callback(request.responseText); 
         } 
        }; 
        request.send(null); 
    } 
    
    function loadDataJSON(callback) { 
        var request = new XMLHttpRequest(); 
        request.overrideMimeType("application/json"); 
        request.open('GET', 'data.json', true); 
    
        request.onreadystatechange = function() { 
         if (request.readyState === 4 && request.status ===200) { 
          callback(request.responseText); 
         } 
        }; 
        request.send(null); 
    } 
    
+0

Могу ли я дать вам пример такого же типа? – Noman

+0

извините, не получил вас – Deb

+0

проверить мой ответ. – Noman

ответ

1

В Raw JavaScript вы могли бы сделать это:

function phpEncode(obj){ 
    var r = []; 
    if(obj instanceof Array){ 
    for(var i=0,l=obj.length; i<l; i++){ 
     r.push(phpEncode(obj[i])); 
    } 
    return '%5B'+r.join(',')+'%5D'; 
    } 
    else if(typeof obj === 'object' && obj){ 
    for(var i in obj){ 
     if(obj.hasOwnProperty(i)){ 
     var v = obj[i], s; 
     if(typeof v === 'object' && v){ 
      s = encodeURIComponent('"'+i.replace('"', '\\"')+'":')+phpEncode(v); 
     } 
     else{ 
      v = typeof v === 'string' ? '"'+v.replace('"', '\"')+'"' : v; 
      s = encodeURIComponent('"'+i.replace('"', '\\"')+'":'+v); 
     } 
     r.push(s); 
     } 
    } 
    return '%7B'+r.join(',')+'%7D'; 
    } 
    else{ 
    r = typeof obj === 'string' ? '"'+obj.replace('"', '\\"')+'"' : obj; 
    return ''+r; 
    } 
} 
function phpDecode(url){ 
    return eval('('+decodeURIComponent(url)+')'); 
} 
function post(send, where, success, context){ 
    var x = new XMLHttpRequest || new ActiveXObject('Microsoft.XMLHTTP'); 
    var c = context || this; 
    x.open('POST', where); x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); 
    x.onreadystatechange = function(){ 
    if(x.readyState === 4 && x.status === 200){ 
     if(success)success.call(c, phpDecode(x.responseText)); 
    } 
    } 
    if(typeof send === 'object' && send && !(send instanceof Array)){ 
    var r = []; 
    for(var p in send){ 
     r.push(encodeURIComponent(p)+'='+phpEncode(send[p])); 
    } 
    x.send(r.join('&')); 
    } 
    else{ 
    throw new Error('send must be an Object'); 
    } 
} 
post({}, 'data.json', function(obj1){ 
    // obj1 holds data.json Object 
    post({}, 'names.json', function(obj2){ 
    // obj2 holds names.json Object 
    }); 
}); 

Вы можете изменить код выше, чтобы удовлетворить ваши потребности. Например, я использую запрос POST. Конечно, в вашем случае это не имеет значения.

При использовании JQuery:

$.getJSON('data.json', function(obj1){ 
    // obj1 holds data.json Object 
    $.getJSON('names.json', function(obj2){ 
    // obj2 holds names.json Object 
    }); 
}); 

Важно заметить, что AJAX является асинхронной, поэтому весь код, который следует должен быть внутри функции успеха. Другими словами, если вы сделаете это:

$.getJSON('data.json', function(obj1){ 
    var whatever = obj1; 
    // obj1 holds data.json Object 
    $.getJSON('names.json', function(obj2){ 
    // obj2 holds names.json Object 
    }); 
}); 
console.log(whatever); 

console.log(whatever) возвратит неопределенное, потому что AJAX не произошло, если это не произошло очень быстро. В любом случае, вам потребуется время, чтобы вы полностью поняли этот материал. Удачи.

+0

Привет PHPglue, протестировал версию jQuery, и это сработало, спасибо. :) – Deb

Смежные вопросы