Ключевое слово as
работает так же, как и явное приведение между совместимыми ссылочными типами, с основным отличием в том, что оно не вызывает исключение в случае неудачного преобразования. Скорее, он возвращает нулевое значение в целевой переменной. Поскольку исключения являются очень дорогими с точки зрения производительности, он считается гораздо лучшим методом приведения.
Вот, пожалуйста:
// Load JSON text from server hosted file and return JSON parsed object
function loadJSON(filePath) {
// Load json file;
var json = loadTextFileAjaxSync(filePath, "application/json");
// Parse json
return JSON.parse(json);
}
// Load text with Ajax synchronously: takes path to file and optional MIME type
function loadTextFileAjaxSync(filePath, mimeType)
{
var xmlhttp=new XMLHttpRequest();
xmlhttp.open("GET",filePath,false);
if (mimeType != null) {
if (xmlhttp.overrideMimeType) {
xmlhttp.overrideMimeType(mimeType);
}
}
xmlhttp.send();
if (xmlhttp.status==200)
{
return xmlhttp.responseText;
}
else {
// TODO Throw exception
return null;
}
}
ПРИМЕЧАНИЕ. Этот код работает только в современных браузерах - IE8, FF, Chrome, Opera, Safari. Для устаревших версий IE вы должны использовать ActiveX, дайте мне знать, если вы хотите, я скажу вам, как;)
Мне нужно было только прочитать небольшой входной файл в формате json и извлечь небольшой объем данных. В этих условиях это работало очень хорошо:
файл json находится в том же каталоге, что и скрипт, и называется data.json, выглядит примерно так:
{"outlets":[
{
"name":"John Smith",
"address":"some street, some town",
"type":"restaurant"
},
..etc...
считывает данные js как это:
var data = <?php echo require_once('data.json'); ?>;
Доступ к элементам данных, как это:
for (var i in data.outlets) {
var name = data.outlets[i].name;
... do some other stuff...
}
AFAIK jQuery устарел синхронные запросы XHR из-за потенциальных проблем с производительностью. Вы можете попробовать обернуть код своего приложения в обработчик ответов XHR следующим образом:
$(document).ready(function() {
$.get('/path/to/json/resource', function(response) {
//'response' now contains your data
//your app code goes here
//...
});
});