2012-03-28 2 views
0

eval()을 사용하여 JSON의 일부인 JavaScript 함수를 실행하고 싶지만 분명히 올바르게 할 수는 없으며 정확히 어디에서 실수인지 알아낼 수 없습니다 /에스. 난 그냥 시도를 들어, 두 개의 매우 간단한 파일을 사용하고 있습니다 - 첫 번째의 index.php이며이에있다 : simpleformSubmi.phpeval()을 사용하여 JSON에서 JavaScript 함수를 실행

<!DOCTYPE html> 
<html> 
<head> 
<title>Simple form sending and receiving a JSON object to/from PHP</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script type="text/javascript"> 
$(document).ready(function(){ 
    var data = 
    { 
    "sales": [ 
     { "firstname" : "John", "lastname" : "Brown" }, 
     { "firstname" : "Marc", "lastname" : "Johnson" } 
    ] // end of sales array 
    } 
    var dataString = JSON.stringify(data); 

    $.post('simpleformSubmi.php', { data: dataString}, showResult, "text"); 
}); 

function showResult(res) 
{ 
    var data = eval('(' + res + ')'); 

    $("#fullresponse").html("Full response: " +data); 
} 
</script> 
<div id="fullresponse"></div> 
</head> 
<body> 

와 두 번째는 다음과 같습니다

<?php 

$logFile = 'logFile'; 
$res = json_decode(stripslashes($_POST['data']), true); 
$arr = "function(){alert('Hi')}"; 
echo json_encode($res); 
echo json_encode($arr); 

그래서 나는 echo json_encode ($ arr)를 실행 한 후였다. 얻고 기 위하여 그러나 대신에 나는 실수를 얻고, 방화범 고리에있는 콘솔은 "괄호 안의"에 오류 "실종"을 보여준다. 그래서 문제는 올바른 JS 함수를 이런 식으로 보내고 올바르게 실행하는 것입니다.

감사 Leron

+2

* "JSON에는 'eval()'"*을 사용하여 JSON에서 JavaScript 함수를 실행합니다. [JSON에는 함수가 없습니다. 전혀.] (http://json.org) 서버 응답에 함수를 포함 시키면 JSON이 아니라 JavaScript 코드가 반환됩니다. 나는 PHP의'json_encode'가 그들을 통과시킬 것이라고 생각하지 않는다. (그것은 * 모르지만 * 모르지만 * 모르겠다.) –

+0

'echo json_encode ($ res)'를 제거/주석 처리하고'echo json_encode ($ arr)'을'echo $ arr'으로 변경하면 어떻게됩니까? – Stefan

+0

전체 응답 : function() {alert ("Hi"); } - 일반 HTML로 나타납니다. – Leron

답변

5

이유는 무엇입니까 json_encode ing $ arr. 자바 스크립트에서 echo $arreval('(' + res + ')()') 문자열을 반환 할 수 있습니다 (함수를 실행하려면 JS의 ()에 주목하십시오). 현재이 기능을 사용하려면 echo json_encode($res)을 제거해야 할 수도 있습니다.

+0

코드는 실행하려고 시도하는 것보다 낫지 만 (var (value) = eval ("function() {alert ('Hi')})" 명확성을 위해)'var data = (function() {alert ('Hi')} {...})' – Esailija

+0

실제로 작동합니다. 감사합니다 badawym! – Leron

+0

Esailija : 아니요, 코드는'eval ('(function() {alert ('Hi ')})()')'가됩니다. 마지막에'()'가 있음을 알 수 있습니다. 그것은 그것을 만든다 [IIFE] (http://benalman.com/news/2010/11/immediately-invoked-function-expression/). – badawym

0

당신은 할 수 없습니다. JSON 객체는 함수 만 포함 할 수 없으며 값만 포함 할 수 있습니다.

JavaScript를 실제로 인쇄하는 일종의 webservice를 설정해야합니다. <script src="/your/endpoint"></script> 선언 클라이언트 측을 통해 호출 할 수 있습니다.

0

js 기능을 데이터로 보낼 수 있습니다.

$data = array("something"=>"12345"); 
$js = "alert('hi!')"; 
$data["autoexec"] = $js;  
echo json_encode($data); 

그러면 고객 측에서 eval (data [ "autoexec"])과 같은 작업을 수행합니다.

관련 문제