あなたは本当には、クライアントからサーバに送信機能と、サーバー上ではなく、セキュリティチェックの多くせずにその機能を実行する必要はありません。あなたはクライアントから受け取ったものを信用できないことを覚えて、しばらくそれを考えてください。それとは別に、サーバーは既に必要なことを行う方法を知っているはずです。通常はあなたが代わりにやっていることは、その機能を使用するように指示するコマンド(文字列)を送ることです(既に持っているので、あなたは信頼することができます)。
しかし、あなたが先に行くと、とにかくことをしたい場合:
文字列に変換せずに。
できません。唯一の方法は、最終的にテキストベースのプロトコルであるHTTP経由で送信できるソースコードまたはその他の形式として関数を送信することです。だからあなたはソースコードを送信するか、それをあなた自身のバイトコードの何らかのバイトコードにコンパイルし、それを送信します(おそらくBase64などの文字列に変換されます)。
ES2015では、
var dataToSend = {prop: data.prop.toString()};
ajax(..., data: JSON.stringify(dataToSend), dataType: "json")
サーバはその文字列をコンパイルし、その結果を実行する必要があります:関数は、あなたがその文字列を送ることができるように、有効な関数宣言や表現の形式をとりtoString
を持つことが必要とされています。 JavaScriptはそれを行う方法を提供しますが(eval
)、再度:非常に危険なクライアントから受け取ったコードを実行するにはです。非常に危険なことを行うには、まず多くの安全点検を行う必要があります。
テキスト/文字列として送信する以外の方法はありません – hindmost
質問はなぜですか?なぜ、バックエンドに関数を送信したいのですか? – Rajesh
次の回答は役に立ちます http://stackoverflow.com/questions/3946958/pass-function-in-json-and-execute –