2011-03-31 7 views

답변

2

이 작동합니다 :

function(data) { 
    if(data.HasCallback) { 
    eval(data.Callback); 
    } 
} 

편집 : 매우 신중하게 충분히 보이지 않았다. 실제로 function() { ... } 텍스트가 표시되는 경우 eval(data.Callback + "()")이 필요합니다.

+0

을'eval', 어디서 그 문서를 찾을 것입니다합니까? – smartcaveman

+2

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Eval – SLaks

+0

@SLaks, 감사합니다. "eval을 사용하지 마십시오!" 섹션은 eval이 보안 위험이라는 것을 나타냅니다. 그 우려가 언제 적용되는지에 대한 좋은 문서/자료를 우연히 알고 있습니까? – smartcaveman

1
eval("(" + functionDeclarationAsString + ")()"); 

functionDeclaractionAsString하면서 function(){ alert('I came from the server'); }

편집

표기법 (된 functionReference)()의 형태 일 것입니다; 함수에 대한 참조를 호출하는 데 사용됩니다. 다음은 유효한 것 :

(function() { alert('it works'); })(); 

다음은 또한 유효 할 것이다 :

if (data.HasCallback) { 
    eval("("+data.Callback+"());"); 
} 

추가를 :

var my_function = function(param) { alert(param); }; 
(my_function)('this is a parameter'); 
+0

추가 괄호가 필요한 이유는 무엇이며 어떤 역할을합니까? – smartcaveman

+0

추가 괄호는 괄호 안에 선언 된 함수를 호출하고자 함을 의미합니다. –

0

당신은 코드로 주어진 문자열을 실행하는 악한 eval을 사용할 수 있습니다 끝의 괄호는 함수를 즉시 실행합니다.

Documented at the evil w3schools

1

그것은 코드를 유지하고 데이터를 분리하기 위해 더 좋은 생각입니다.

{ 
    "Message": "I came from the server" 
} 

그리고 당신의 자바 스크립트 : 귀하의 예제를 사용하려면, 왜이 같은 JSON이 정확히 무엇을

$.post('MyApp/GetPostResult.json', function(data) { 
    if (data.Message) { 
     alert(data.Message); 
    } 
}); 
+0

클라이언트 쪽 코드를 생성하여 사용자 인터페이스 구현 시간에 코드 재사용 및 축소를 극대화 할 수 있기 때문에 서버 측에서 사용할 수 있습니다. – smartcaveman

관련 문제