2009-04-03 5 views
0

함수에서 객체를 전달하려고합니다. 여기에 내 코드입니다 :구문 분석 함수에서 JSON obj를 전달 하시겠습니까? | noob javascript 질문

<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> 

내가 뭘 원하는 것은 대신에 나는 물체를 통과 할 parseJSON 기능 내부의 O를 개체를 사용하는 그래서 그 loadJSON는() 나는 개체와 일을 할 수 호출 한 후. 나는 파스 (parse) 함수 안에서 innerHTML 호출을하는 것이 "깔끔"하지 않다는 것을 알았다.

나는 스크립트의 시작 부분에 "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 코드를 대상으로 외부에서받은 "O", 즉 내가 함수 외부에 노출 할 데이터입니다. 나는 "var jsonOutput = {};"을 시도했다. (함수 안과 밖) "jsonOutput = o; return jsonOutput"을 설정하지만 그렇게하지는 않습니다. –

1

또한, 당신이 <script> 태그를 사용하여 JSON 데이터를로드하려고하는 것 같다.

당신은 또한 XMLHttpRequest를 통해 JSON 데이터를로드 한 후 통해 객체로 돌려 수 :

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

그리고 당신은 데이터가 얼마나 보안 확인할 수없는 경우, 당신은 (참조 official JSON JavaScript parser을 사용할 수 있습니다 자세한 내용은 here) 데이터를 실행하기 전에 데이터의 유효성을 검사합니다.

스티브

+0

XMLHttpRequest를 네트워크 트랜잭션에서 더 많이 수집 할 때 사용하지 않기 위해 노력하고 있었습니까? 조언 주셔서 감사합니다, 나는 소스에 대해 확신하므로 json2.js를 이번에 사용하지 않을 것입니다. –

+0

XMLHttpRequest가 HTML 페이지에 파일을 직접로드하는 것보다 더 무거운 이유는 모르겠습니다 ... JavaScript에서 XML/JSON 데이터를로드해야 할 때마다 XMLHttpRequest를 사용하는 것이 일반적으로 생각됩니다. –