Передать JSON объект из функции разбора? | нуб Javascript вопрос - PullRequest
0 голосов
/ 03 апреля 2009

Я пытаюсь передать объект из функции. Вот мой код:

<script type="text/javascript">

// finds the head element; creates a script with passed url; appends it to the head
function loadJSON(url) {
  var headID = document.getElementsByTagName("head")[0];         
  var newScript = document.createElement('script');
      newScript.type = 'text/javascript'; // isn't this 'application/json' really?
      newScript.src = url;
  headID.appendChild(newScript);
}

function parseJSON(o) {
  if (content == null) {
    document.write("<p>parseJSON(): JSON failed.</p>");
    return false;
  }

  isDST = "<strong>not</strong> ";
  if ( o.rawOffset == o.dstOffset ) {
    isDST = "";
  }
  document.getElementById("geonames").innerHTML = "<p>The time now is " + o.time + " in " + o.countryName +".</p>";
}

var lat = "47.01"; var long = "10.2"; // test data for austria
var jsonUrl = " {{URL}} ";
loadJSON(jsonUrl);
</script>

То, что я хочу сделать, это вместо использования объекта o внутри функции parseJSON. Я хочу передать объект так, чтобы после вызова loadJSON () я мог что-то делать с объектом. Я нахожу, что это не "аккуратно", когда вызовы innerHTML внутри функции разбора.

Я пробовал много итераций, например, объявив «var jsonOutput» в начале скрипта, а затем сделав «jsonOutput = o», но из-за этого jsonOutput остается неопределенным. Если я попытаюсь вернуть jsonOutput, я не знаю, куда он возвращается, я все равно не смогу его использовать.

Нужно ли создавать глобальную переменную? Я пробовал простое «глобальное объявление jsonOutput», но оно не похоже на изменение внутри функции.

Я застрял, пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 03 апреля 2009

Также кажется, что вы пытаетесь загрузить данные JSON с помощью тега <script>.

Вы также можете загрузить данные JSON через XMLHttpRequest и затем превратить их в объект с помощью:

var dataObject = eval('(' + myJSONData + ')');

И если вы не можете проверить, насколько безопасны данные, вы можете использовать официальный анализатор JSON JavaScript (см. здесь для получения дополнительной информации) для проверки данных перед их выполнением .

Steve

0 голосов
/ 03 апреля 2009

Я не совсем уверен, полностью ли я понимаю ваш сценарий, но пытались ли вы вернуть целый объект, а не просто логический или json?

function parseJSON(o)
{
   // Your code here
   var result = new Object();
   result.IsSuccess = true; // or false
   result.JSON = someData; // your json output
   return result;
}

function loadJSON()
{
   // Your code here
   var jsonParseResult = ParseJSON(o);
   if (jsonParseResult.IsSuccess)
   {
       // More code here involving jsonParseResult.JSON
   }
}
...