2009-04-03 1 views
0

Я пытаюсь передать объект из функции. Вот мой код:Пропустить JSON obj из функции parse? | noob javascript question

<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() вызов я могу сделать что-то с объектом. Я считаю, что это не «аккуратно», имея внутренние вызовыHTML внутри функции синтаксического анализа.

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

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

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

ответ

0

Я не совсем уверен, полностью ли понимаю ваш сценарий, но попытался ли вы вернуть целый объект, а не возвращать только логическое или 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 
    } 
} 
+0

Хм, то parseJSON это обратный вызов, поэтому он имеет код JSON, полученные от вне офиса в качестве объекта «о», это данные, которые я хочу, чтобы выставить вне функции. Я попробовал "var jsonOutput = {};" (в функции и из нее), а затем установите «jsonOutput = o; return jsonOutput», но это, похоже, не делает этого. – 2009-04-03 14:51:48

1

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

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

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

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

Стив

+0

Я пытался избежать использования XMLHttpRequest, поскольку, по моему мнению, он тяжелее для сетевых транзакций? Спасибо за совет, хотя, я уверен в источнике, поэтому не использую json2.js на этот раз. – 2009-04-03 14:15:10

+0

Я не знаю, почему XMLHttpRequest был бы тяжелее, чем непосредственно загружать файл на HTML-страницу ... Я думаю, что довольно распространенная практика использования XMLHttpRequest всякий раз, когда вам нужно загружать данные XML/JSON в JavaScript. –

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