Как включить данные JSON в JavaScript синхронно без синтаксического анализа?

Ключевое слово as работает так же, как и явное приведение между совместимыми ссылочными типами, с основным отличием в том, что оно не вызывает исключение в случае неудачного преобразования. Скорее, он возвращает нулевое значение в целевой переменной. Поскольку исключения являются очень дорогими с точки зрения производительности, он считается гораздо лучшим методом приведения.

29
задан Paull 7 November 2010 в 08:28
поделиться

3 ответа

Вот, пожалуйста:

// 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, дайте мне знать, если вы хотите, я скажу вам, как;)

14
ответ дан 28 November 2019 в 01:36
поделиться

Мне нужно было только прочитать небольшой входной файл в формате 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...
}
1
ответ дан 28 November 2019 в 01:36
поделиться

AFAIK jQuery устарел синхронные запросы XHR из-за потенциальных проблем с производительностью. Вы можете попробовать обернуть код своего приложения в обработчик ответов XHR следующим образом:

$(document).ready(function() {
  $.get('/path/to/json/resource', function(response) {
    //'response' now contains your data
    //your app code goes here
    //...
  });
});
-2
ответ дан 28 November 2019 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: