gpt4 book ai didi

php - json 响应中的函数名称 - 不起作用

转载 作者:行者123 更新时间:2023-12-01 02:08:08 25 4
gpt4 key购买 nike

我试图在 JSON 响应中发送一个函数,并尝试在 js 中提醒该函数。下面是代码。

JS:

$('input').keyup(function(){
$.ajax({
type: "POST",
url: "sample.php",
dataType : 'json',
data: 'val='+$('input').val(),
success: function(response){

var json = transport.responseText.evalJSON();
alert(json.function()); // => **should alert 'foo bar' - but not**
}
});
});

PHP:

<?php
// Our sample array
$foo = array(
'string' => 'bar',
'function'=> 'function(){return "foo bar";}'
);
$value_arr = array();
$replace_keys = array();
foreach($foo as $key => &$value){
// Look for values starting with 'function('
if(strpos($value, 'function(')===0){
// Store function string.
$value_arr[] = $value;
// Replace function string in $foo with a 'unique' special key.
$value = '%' . $key . '%';
// Later on, we'll look for the value, and replace it.
$replace_keys[] = '"' . $value . '"';
}
}

// Now encode the array to json format
$json = json_encode($foo);

/* $json looks like:
{
"number":1,
"float":1.5,
"array":[1,2],
"string":"bar",
"function":"%function%"
}
*/
// Replace the special keys with the original string.
$json = str_replace($replace_keys, $value_arr, $json);

// Send to to the client
echo $json;

/* This echoes the following string:
{
"string":"bar",
"function":function(){return "foo bar";}
}
*/
?>

上面我做错了什么?如有任何帮助,我们将不胜感激。

最佳答案

JSON没有任何函数表示。这是一种数据符号。即使您欺骗 PHP 发送一个函数(正如您似乎正在尝试做的那样),客户端上正确的 JSON 反序列化器也会抛出异常(理想情况下)。一些依赖 eval 的非常幼稚的方法可能会传递函数,但此时,您使用的不是 JSON,而是 JavaScript。

如果您想发回代码,则需要发回JavaScript。

另外,在这一行:

alert(json.function());

...您有语法错误。 function 是 JavaScript 中的保留字。您不能将其用作属性名称文字。如果您创建一个名为“function”的属性(您可以,但可能不应该),要访问它,您必须使用字符串表示法来访问属性:

alert(json["function"]());

另请参阅Gaby's answer ,您似乎已将一些 Prototype 代码 (evalJSON) 混合到其中。

关于php - json 响应中的函数名称 - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6213095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com