标签:
有时需要通过json 传送函数,但是php的json_encode会带上引号。
下面是解决方案:
http://solutoire.com/2008/06/12/sending-javascript-functions-over-json/
PHP:
// Our sample array $foo = array( ‘number‘ => 1, ‘float‘ => 1.5, ‘array‘ => array(1,2), ‘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: { "number":1, "float":1.5, "array":[1,2], "string":"bar", "function":function(){return "foo bar";} }
Javascript
new Ajax.Request(‘json_server.php‘, { method:‘get‘, onSuccess: function(transport){ var json = transport.responseText.evalJSON(); alert(json.function()); // => alerts ‘foo bar‘ } });
Sending Javascript Functions Over JSON
标签:
原文地址:http://www.cnblogs.com/binglong/p/4535743.html