2015-09-05 3 views
0

У меня есть массив JSON как:Javascript - Как создать переменную из массива JSON (URL)?

[ 
    { 
    "location":"New York", 
    "company":"XYZ LTD", 
    "status":"Active" 
    }, 
    ... etc 
] 

Я использую следующую функцию, чтобы вернуть этот массив из URL:

var getJSON = function(url, successHandler, errorHandler) { 
    var xhr = typeof XMLHttpRequest != 'undefined' 
    ? new XMLHttpRequest() 
    : new ActiveXObject('Microsoft.XMLHTTP'); 
    xhr.open('get', url, true); 
    xhr.onreadystatechange = function() { 
    var status; 
    var data; 
    // https://xhr.spec.whatwg.org/#dom-xmlhttprequest-readystate 
    if (xhr.readyState == 4) { // `DONE` 
     status = xhr.status; 
     if (status == 200) { 
     data = JSON.parse(xhr.responseText); 
     successHandler && successHandler(data); 
     } else { 
     errorHandler && errorHandler(status); 
     } 
    } 
    }; 
    xhr.send(); 
}; 

Мы используем функцию:

getJSON('http://example.com/json.php', function(data) { 
    alert('Data was collected successfully.'); 
}, 
function(status) { 
    alert('Something went wrong while retrieving the location data.'); 
}); 

Хорошо, так хорошо, что это работает, и «данные были собраны. Я совершенно новичок в Javascript, и я не уверен, как сохранить данные, которые были собраны в качестве переменной в Javascript.

Я пробовал:

getJSON('http://example.com/json.php', function(data) { 
    var myData = data; 
}, 
...end 

И:

var myData = getJSON('http://example.com/json.php', function(data) { 
    return data; 
}, 
...end 

Но на данный момент, если я делаю:

console.log(myData);

Тогда я получаю undefined. Но если я делаю:

var myData = getJSON('http://example.com/json.php', function(data) { 
    console.log(data); 
}, 
...end 

я вернусь [Object,Object] и это мои данные !.

Итак, как мне получить данные из successHandler и сохранить их как переменную?

ответ

1
var myData; 
getJSON('http://example.com/json.php', function(data) { 
    myData = data; 
}, ... 

Объявление переменной вне области действия. это трюк.

С уважением.


Обновление: Уведомление Pls, что ajax является асинхронным. если вы сделаете вывод консоли прямо под вызовом getJSON, это не сработает, потому что данные еще не получены.

+0

Привет и спасибо за ввод! Я просто собирался сказать, что я все еще получаю «неопределенный», но потом я понял, что это может быть так. Я предполагаю, что использование, которое у меня для этого, было бы лучше подходит для синхронной версии этой функции? Off, но как бы вы это сделали ... Получите его, чтобы зарегистрировать объект на консоли, но только после его получения? Обещания? –

+0

вы можете изменить 'xhr.open ('get', url, true),' to 'xhr.open ('get', url, false);' (теперь это синхронно). но я этого не сделаю, потому что в этом случае браузер замораживается до тех пор, пока не будет получен ответ вашего запроса. нормально, ты этого не хочешь. в javascript вам нужно научиться кодировать обратные вызовы. все части javascript строятся с обратными вызовами (eventhandler, ajax, services и т. д.). если вы хотите поговорить об этом, я могу помочь вам с вашим вопросом. Но PLS здесь нет. откройте чат на stackexchange и пригласите меня. –

+0

Я думаю, что у вас есть хорошая точка. У меня есть опыт работы с PHP, поэтому я должен изменить свое решение здесь. То, что я пытаюсь сделать, это прочитать эти данные в JS, чтобы использовать в качестве источника для позиций маркера карты на картах Google, я думаю, мне нужно сделать это синхронно, но я действительно не уверен, если бы вы любезно предоставили дополнительную информацию о это тогда было бы здорово! Создали комнату и пригласили вас. –

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