2012-03-28 11 views
2

私はJSONとPHPでいくつかのことを試しています。私は100%確信していませんが、やり方を見つけることができないものがあります。しかし、それは良いオプションのように見えるので(可能であれば)私はここで尋ねることに決めました。JSONからPHP関数を実行

jquery公式サイトのこれらの例があります。全く複雑

<!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) 
{ 
    $("#fullresponse").html("Full response: " +res); 
} 
</script> 
<div id="fullresponse"></div> 
</head> 
<body> 

何も:2つのファイルは最初のものは、私は私のアヤックスを実行index.phpを、それはありませんHETEある、があります。そして私はある私のsimpleformSubmi.phpを持っている:

<?php 

$logFile = 'logFile'; 
$res = json_decode(stripslashes($_POST['data']), true); 
error_log("result: ".$_POST['data'].", res=".json_encode($res), 3, $logFile); 
error_log("\n", 3, $logFile); 

//header("Content-type: text/plain"); 
foreach ($res as $key=>$value) 
{ 
    $str[] = $value; 
} 
$functionArray ="function(){ \$a = 10; echo \$a;}"; 
$jsStr = $str[0][1]; 
echo json_encode($jsStr['firstname']); 
echo '<hr />'; 
echo json_encode($res); 
echo '<hr />'; 
echo json_encode($functionArray); 
?> 

あなたは$ functionArrayを見ることができるように - 実際に、私はJSONを使用して戻って返すようにし、その後、それを実行したいPHPの関数を含む文字列です。だから本当にそれを行う方法はありますか?今、私は、ファイルを実行afet index.phpの中で取得することです:

"function(){ $a = 10; echo $a;}

おかげ

+1

あなたはJSONに何かPHPを実行させることができません... –

答えて

2

JavaScriptを使用してPHP関数を実行しようとしているようです。PHPはサーバーサイドで実行されるので、PHP関数をそのコンテキストで実行する唯一の方法は、たとえば、別のajax呼び出しを実行して、サーバーに関数を実行するように要求することです。このような

何か:

のindex.php

$(document).ready(function(){ 
    var data = 
    { 
    "sales": [ 
     { "firstname" : "John", "lastname" : "Brown" }, 
     { "firstname" : "Marc", "lastname" : "Johnson" } 
    ] // end of sales array 
    } 
    var dataString = JSON.stringify(data); 

    //Change post() success callback function to executePHP() 
    $.post('simpleformSubmi.php', { data: dataString}, executePHP, "text"); 

    //Let's define executePHP() outside post() call for clarity 
    function executePHP() 
    { 
     //Ask the server to execute function foo(), and get the result 
     $.get("example.com/somefile.php?function=foo", function(data) 
     { 
      //Success function, do whatever you want. 
      alert(data); 
     }); 
    } 
}); 

その後、somefile.php

<?php 
//Condition(s), if any. You could even implement this interface using REST. 
//Get function to execute 
if($_GET["function"] == "foo") 
{ 
    //Output function's result. 
    echo foo(); 
} 

//The function you want to run 
function foo() 
{ 
    //Do something 
    $a = 10; 
    return $a; 
} 
?> 

でJavaScriptがalert(data);声明に達したときにすべてが、うまくいった場合は、10が表示されます。

1

あなたは、応答が受信されているので、それを応答として送信した後にPHPの関数を実行することはできませんLernクライアント側、およびPHPは、サーバー側の言語です。

通常、あなただけの値を返します。あなたの例では、あなただけのキーと値のペアa,10を保持している連想配列を返します。

PHPスクリプトからjavacript関数を返して、evalを使用してクライアント側で実行できますが、eval'ingは、セキュリティ上の脆弱性のpandoraのボックスを開きます。

+0

ええ、あなたのコメントを読んで私はちょっと愚かな気分になります。 Obv。クライアント側でPHPスクリプトを実行する方法はありませんが、JS関数と評価に関する第二の部分は私にとって興味深いようです。 – Leron

+0

'eval'の危険性について慎重に読み、安全に使用する方法。 – xbonez

0

PHPコードをPHPサーバーの外部で実行することはできません。だからあなたはブラウザでそれを実行することはできません。

ただし、JavaScriptの文字列を渡してevalで実行できます。それは悪いと言う人もいますが、最初はevalがJSONを解析する唯一の方法であることを覚えておいてください。

0

何かをPHPに送り返すには、フォームからGETまたはPOSTアクションを介してp.e経由でserversideを呼び出す必要があります。しかし、いいえ、クライアント側のエコー出力としてエコー経由でサーバ側では何も実行できません。サーバサイドでeval(http://php.net/manual/es/function.eval.php)を使ってPOSTメッセージから何かを実行することはできますが、大きなセキュリティホールを開くことはできません。

0

あなたは関数を返しました(私はあなたがこれをjavascriptとすると仮定しています)、今呼び出す必要があります。これは、jQuery $ .post成功コールバックを使用して行うことができます。

は、これを変更してみてください。..

$.post('simpleformSubmi.php', { data: dataString}, function(data){eval(data)}, "text"); 

$.post('simpleformSubmi.php', { data: dataString}, showResult, "text"); 

をそのPHP(それがどのように見える)とないJavascriptが、これは、サーバーから実行する必要がある場合。それがそのサーバー側の言語であるということです。

関連する問題