我想使用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
答案 0 :(得分:5)
为什么你{$ 1}} $ arr。您可以在JavaScript中将其作为字符串json_encode
和echo $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”]);
的操作