使用eval()在JSON中执行JavaScript函数

时间:2012-03-28 11:05:19

标签: php javascript json

我想使用eval()执行作为JSON一部分的任何JavaScript函数,但显然我无法正确执行,并且无法确定错误/ s的确切位置。我正在使用两个非常简单的文件,只是为了尝试 - 第一个是index.php,它的位置是:

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

,第二个是simpleformSubmi.php:

<?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)之后;得到并警告,但我得到一个错误,并在Firebug控制台显示错误“缺少”在parenthetica“。所以问题是 - 如何以这种方式发送有效的JS函数并正确执行它?

由于 Leron

3 个答案:

答案 0 :(得分:5)

为什么你{$ 1}} $ arr。您可以在JavaScript中将其作为字符串json_encodeecho $arr返回(请注意JS中的eval('(' + res + ')()')以执行该函数)。您可能需要删除()才能使其暂时生效。

答案 1 :(得分:0)

你做不到。 JSON对象不能包含函数,只能包含值。

您必须设置某种实际打印JavaScript的Web服务,然后您可以通过<script src="/your/endpoint"></script>声明客户端进行调用。

答案 2 :(得分:0)

您可以将js函数作为数据发送。

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

然后在客户端执行类似eval(data [“autoexec”]);

的操作