모든 브라우저에서 서버 또는 로컬 파일에서 JSON 데이터를 검색하는 Javascript 함수를 작성했습니다. 이 코드는 JSON 데이터를 (a) XMLHttpRequest 응답 또는 (b) 가져온 스크립트 변수 중 하나에서 다이제스트합니다.별칭을 통해 Javascript 문자열 변수 값 가져 오기
후자의 경우이 코드는 변수 'JSONdata'를 필요로합니다. 두 개 이상의 장소에 인라인하지 않고 전역 상수 JSCRIPTVAR로 초기화됩니다. 데이터 파일이 다른 값을 사용하면 변경하기 쉽도록 읽기 쉽고 유지 관리됩니다. 코드에서 eval 함수를 사용하여 JSON 데이터 (JSON 데이터에 대한 포인터)를 추출하는 것을 볼 수 있습니다. 실제로는 편안함을 위해 실제 데이터에 너무 가깝습니다. 내 질문은, 어떻게 (기본 변수) 'JSONdata'별칭 JSCRIPTVAR를 통해 (무시 무시한) 평가 기능을 사용하지 않고 원시 변수의 가치를 읽습니까?
여기에 설명 된 클로저 및 다른 방법을 시도했지만 (Reference a Javascript variable by a text alias) JSON 데이터를 가져올 수 없으며 변수 이름 또는 '정의되지 않음'만 가져올 수 있습니다. loadViaXHR2, loadViaXHR1 및 loadViaJScript :
var JSCRIPTVAR = "JSONdata"; // any variable name less than 10 characters or less
function digestJSON(response, JSONobjName) {
if (typeof response == 'string')
JSONstring = response;
else if (typeof JScriptVar !== 'undefined' && typeof JSCRIPTVAR.valueOf() !== 'undefined')
JSONstring = eval(JSCRIPTVAR.substring(0, 10)); // ensure that we don't take in any malicious code
try {
// this method assigns the JSON data to a global object using JSONobjName, so can support multiple JSON objects
window[JSONobjName] = JSON.parse(JSONstring); // Parse JSON string into object - IE 8+ supports JSON.parse()
console.log("Successfully digested JSON. Data is now available via DOM methods.");
} catch (e) {
alert("Error parsing the '" + JSONobjName + "' file'. Check that the file is properly formatted.");
console.error("JSON parsing error: ", e + ", type: " + this.type);
}
}
함수 digestJSON 익명 콜백을 사용 3 개 기능에 호출된다. 후자는 Javascript 파일을 통해 JSON 데이터를 가져 오는 파일입니다 (아래 예제 참조). 호출되면 'callback'매개 변수는 'digestJSON'으로 설정됩니다.
function loadViaJScript(urlSpec, JSONobjName, callback, isAsync) {
console.log("Attempting to read JSON data using Javascript methods.");
var script = document.createElement('script');
var parent = document.getElementsByTagName('head').item(0) || document.documentElement;
script.type = "text/javascript";
script.onerror = function(e) {
alert("Error loading the '" + JSONobjName + "' file: '" + urlSpec + "'. Check that the file exists.");
console.error("Error loading via Javascript: ", e + ", type: " + this.type);
}
script.src = urlSpec;
parent.appendChild(script);
script.onload = function() {
callback(null, JSONobjName);
};
}
샘플 데이터 (사소한 예) : VAR JSONdata = '{ "블루", "빨간색" "괜찮습니다": "내 페이브 색"}';
아마도'digestJSON()'을 호출하는 코드를 보는데 도움이 될 것입니다. –
Thanks @GarciaHurtado. 나는 제출을 기뻐했다. 정말 간단한 질문입니다. 모든 JSON 항목이 아무나 벗어나지 않기를 바랍니다. – wmclaxton
'JSONobjName'과 같은 전략을 사용하지 않는 이유는 무엇입니까? – Bergi