ホームページ > バックエンド開発 > PHPチュートリアル > evalを使って返すと値が取得できない理由を教えてください。

evalを使って返すと値が取得できない理由を教えてください。

WBOY
リリース: 2016-06-13 12:25:36
オリジナル
1000 人が閲覧しました

eval を使用して返すと値が取得できません。なぜですか?

------ ----- -----------------------------
パブリック関数 ajax(){
// var_dump( $_POST);die;
$data=array();
$Model = new Model();
$data['content']=$_POST['content'];
$ data['time']= time();
$data['timee']=date('Y-m-d H:i:s',time());
$data['sender']= aaa";
$ dd=M(msg)->data($data)->add();
if($dd){
$dataa=M('msg')- >order('id desc ')->limit('5')->select();//ここでは 5 つのデータ レコードを取得できます
$this->ajaxReturn($dataa);
}
}

var dat=eval("(" msg ")");//この文を使用すると、次の処理が実行できなくなります。なぜでしょうか。これには thinkphp3.1.2 を使用しました
-----ソリューションのアイデア----------------------
msgがjson形式のデータであることを確認してください
-----解決案-----------
public function ajax(){
// var_dump($_POST);die;
$data=array();
$Model = new Model();
$data['content'] = $_POST['content'];
$data['time']=time();
$data['timee']=date('Y-m-d H:i:s',time()) ;
$data['sender']="aaa";
$dd=M(msg)->data($data)->add();
if($dd){
$dataa=M('msg')->order('id desc')->limit('5')->select();//ここで 5 つのデータ レコードを取得できます
$this->ajaxReturn($dataa);
///$dataa の型はすでに配列です。フロントエンドは、EVAL を使用せずに、alert(msg.your data key value) を直接使用できます。

//または配列を json 文字列に変換します
$this->ajaxReturn(json_encode($dataa));// このようにして、戻り値は json 文字列になり、フロントエンドがjson を解析するには EVAL またはその他のメソッド解析が必要です。
}
}
-----ソリューションのアイデア----------------------
alert(msg)
がポップアップし、[object Object]、[object Object]、[object Object]、[object Object]、[object Object]
と表示される場合、msg はすでに解析された js 配列であることを意味します。明らかに実際のコードを提供していません。json パラメータがない場合、$.post はそれ自体で解析されません

msg はすでに解析されているため、
var dat=eval("(" msg ")" );
それは間違っています

-----解決策のアイデア----------------------
返されるデータはすでに json であるため、評価する必要はありません。

var dat=eval("(" msg ")");

var dat=msg; に変更できます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート