web-dev-qa-db-ja.com

PHPとJavascriptの間で配列を転送するための最良の方法

したがって、データベースから取得したレコードの配列があります。配列は次の形式です。

$rows[0]['id']=1;
$rows[0]['title']='Abc';
$rows[0]['time_left']=200;


$rows[1]['id']=2;
$rows[1]['title']='XYZ';
$rows[1]['time_left']=300;
//And so on upto 10-20 rows

この配列をJavaScriptコードに転送する最良の方法は何ですか? javascriptですべてのレコードをループできるようにし、「id」属性を使用して、情報を使用してそのIDでdivを更新します。

私のJavaScriptコードは外部の.jsファイルにありますが、私のページのHTMLコードでphpコードを実行することができます。だから私はこのようなことをすることができます:

my_file.js内:

var rows=New Array();

HTMLコードの場合:

<html>
<head>
<script type="text/javascript" src="js/my_file.js"></script>

<script type="text/javascript">
<? foreach ($rows as $row):?>
<? extract($row);?>
rows[<?=$id;?>]['title']="<?=$title;?>";
//And so on
<? endforeach;?>
</script>
19
Click Upvote

私はこれにJSONオブジェクトを使用する傾向があります:

  • サーバー側では、JSONはデータをエンコードします:json_encode($data);
  • JavaScript側では、JSONオブジェクトをパラメーターとして受け取り、それを解凍する関数を記述します。

オブジェクトを解凍すると、配列の内容を<DIV>タグ、またはページ上の任意の場所に出力できます(jQueryはこれを非常にうまく処理します)。

29
barfoon

インラインデータを実行している場合、私は常に実行するのが好きです

<script type="text/javascript">
window.sitescriptdata = {}; 
window.sitescriptdata.foo = ( <?php echo json_encode( $structure ); ?> );
</script>

基本的なことについては、AJAXコールバックを行う手間が省けます。また、データをDOMノードに接着する場合、「メタオブジェクト」の方法は私が本当に気に入っている方法です。

<div id="foobar">
 <div><object class="metaobject">
        <param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES );?>" />
 </object></div>
</div> 

これは見栄えがよくないかもしれませんが、そのノードへの正確な一意のパスを知る必要なしに、データをDOMノードに直接関連付ける効果的な方法です。特定の画面要素に添付する必要のあるデータセットが多数ある場合に非常に便利です。

私は通常 http://noteslog.com/metaobjects/ jQueryのプラグインを使用しますが、非常に単純なので、時々自分で作成しました(プラグインが見つからなかったときもありましたが、新しいそれがどのように機能したか)

完了すると、

$( "div#foobar> div")。get()。data。($ yourarrayhere)

コードに表示されます。

12
Kent Fredric

あなたの質問(そして私の返信、コメントの返信のスペースが足りなくなった)をフォローアップするために、私が使用するコードの非常に単純化されたサブセットを次に示します。

Javascript AJAX jQueryのハンドラー:

$.ajax({
   type: "POST",
   url: "BACKEND.php",
   timeout: 8000,
   data: "var1=" + myVar,
   dataType: "json",
   error: function(){
     $("#DIVID").html("<div class='error'>Error!</div>");
   },  
   success: function(jsonObj){
     $("#DIVID").html(jsonObj.mydata);
   }
 });


PHP Array:
$data['mydata'] = $myData;
1
barfoon

AJAX here のような例では、この問題を次の方法で解決できます。

.phpファイル(ajaxリターン関数)

$myArray = array("object_id"=>1, "object_title"=>"Testobject");
return json_encode($myArray);

.jsファイル(javascript関数)

...
if(g_httpRequest.readyState == 4)
{
var jsonRes = JSON.parse(g_httpRequest.responseText);
alert(jsonRes.object_title)
}
...
1
Marco

私はまだかなり新しいですが、おそらくこのメソッドは最も安全ではないと言いますが、いつでもJavaScript配列を文字列に変換し、それをphpのURLに渡してGETすることができます。

そう:

for(var i=0;i < jsarray.length;i++) 
{
var x = jsarray[i];
urlstring += "myvalue[]="+x+"&";
}

document.location.href = "mypage.php?"+urlstring;

そして、phpは次のようになります。

$phparray = $_GET['myvalue'];

それが役立つことを願っています

0
Lan