$array = ['a'=>'b','b'=>'c','d'=>function(){ return 'e';}];echo json_encode($array);
產生的JSON 如下
{"a":"b","b":"c","d":{}}
有沒有什麼辦法使產生的結果中可以使用 JS的 匿名函數?
好多JS庫的配置都是JSON的,但是他的配置有些使用的匿名函數來返回結果,這時候從服務端發回配置的時候,正常的
key-value配置轉JSON可爽了,可是碰到JS的匿名方法就玩脫了。。。。
其實我就要這樣的....
var jsonText = { title: '提示', content: '按鈕回呼函數返回 false 則不許關閉', okValue: '確定', ok: function () { this.title('提交中…'); return false; }, cancelValue: '取消', cancel: function () {}};
然而產生的卻是
{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":"function(){return \"\u63d0\u4ea4\u4e2d...\";}"}
其中匿名方法,如你所見,被轉成字串了,玩脫了。。。
根據樓下兄弟的提點,完整的解決辦法如下
$data = ['title'=>'提示','okValue'=>'確定','ok'=>'function(){return "提交中...";}'];$json = json_encode($data);$json = str_replace(['"function','}"'],['function','}'], $json);echo $json;
產生的json如下
{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":function(){return \"\u63d0\u4ea4\u4e2d...\";}}
回複內容:
$array = ['a'=>'b','b'=>'c','d'=>function(){ return 'e';}];echo json_encode($array);
產生的JSON 如下
{"a":"b","b":"c","d":{}}
有沒有什麼辦法使產生的結果中可以使用 JS的 匿名函數?
好多JS庫的配置都是JSON的,但是他的配置有些使用的匿名函數來返回結果,這時候從服務端發回配置的時候,正常的
key-value配置轉JSON可爽了,可是碰到JS的匿名方法就玩脫了。。。。
其實我就要這樣的....
var jsonText = { title: '提示', content: '按鈕回呼函數返回 false 則不許關閉', okValue: '確定', ok: function () { this.title('提交中…'); return false; }, cancelValue: '取消', cancel: function () {}};
然而產生的卻是
{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":"function(){return \"\u63d0\u4ea4\u4e2d...\";}"}
其中匿名方法,如你所見,被轉成字串了,玩脫了。。。
根據樓下兄弟的提點,完整的解決辦法如下
$data = ['title'=>'提示','okValue'=>'確定','ok'=>'function(){return "提交中...";}'];$json = json_encode($data);$json = str_replace(['"function','}"'],['function','}'], $json);echo $json;
產生的json如下
{"title":"\u63d0\u793a","okValue":"\u786e\u5b9a","ok":function(){return \"\u63d0\u4ea4\u4e2d...\";}}
函數是無法通過json_encode方法來轉換的,能轉換的只有資料。你覺得這個簡單的函數能幫你實現把php代碼轉為js代碼的功能嗎?
不過,其實還是有辦法的,你這麼搞
$array = ['a'=>'b','b'=>'c','d'=>'function(){return "e";}'];echo json_encode($array);
然後在js端eval
一下就好了
data = JSON.parse(json);data.d = eval(data.d);
更新
查看相關文檔發現js如果遇到json的字串是這種形式的function() {
,就會報語法錯誤。解決方案是把這一段去掉
$array = ['a'=>'b','b'=>'c','d'=>"return 'e'"];echo json_encode($array);
然後在解析的時候用匿名函數去執行
function getVal(str) { return function () { return eval(str); };}data = JSON.parse(json);data.d = getVal(data.d);console.log(data.d());