2012-01-20 33 views
0

多くの例が関連していましたが、私はまだ混乱しています。私はxxx秒ごとに更新されたファイルの結果を得るためにajax(私はあまり知らない)を使用しています。変数を1つだけ渡すと完全に動作しますが、PHPから配列を渡す必要がある場合はどうすればよいでしょうか?javascriptに変数としてPHP配列を渡してurlをロードし、PHP配列に戻しますか?

構造は最も単純な:

show_results.php 

<?php 
include_once('modWhosonlineCustom.inc.php'); 
$document->addScript("http://code.jquery.com/jquery-latest.js"); 
$document->addScript("ajax.js"); 
$array_name = modWhosonlineCustom::getOnlineUserNames();//the array I need to pass to javascript variable 
?> 

<script> 
var whosonline = '<?php echo "$array_name"; ?>'; 
</script> 

<div id="results"></div> 
URL負荷に構築するために複数のparam持っているだろうより

Ajaxコード:どのように私は再び使用することができ、バックPHPの応答ページへ

ajax.js 

    $(document).ready(function() { 
    $("#results").load("response.php?array_name[param1]&array_name[param2]"); 
    var refreshId = setInterval(function() { 
    $("#results").load("response.php?array_name[param1]&array_name[param2]&randval="+ Math.random()); 
    }, 10000); 
    $.ajaxSetup({ cache: false }); 
    }); 

とを配列のパラメータはurlを渡しますか?

response.php 

    <?php 
    $names = $_GET['array_name']; 
    foreach ($names as $name) { 
    //do something 

何か提案は本当に感謝しています!

EDIT

みんなありがとう、私は今、正しい道だと思いますが、JavaScriptでURLを通じてこの配列を渡す問題をramains。あるいは、私はPHPエンドコールバックファイルの正しい方法でそれを取得していないでしょう。私はmodifyed何を紹介します:警告:ここで私が取得しています、他の側で

show_results.php 

    ... 
    <?php 
    $names = modWhosonlineCustom::getOnlineUserNames(); 
    ?> 

    <script> 
    var whosonline = '<?php echo "json_encode($names)"; ?>'; 
    </script> 


    ajax.js 


    $(document).ready(function() { 
    $("#atendentes").load("response.php?names=" + whosonline); 
    var refreshId = setInterval(function() { 
    $("#atendentes").load("response.php?names=" + whosonline + "&randval="+ Math.random()); 
    }, 10000); 
    $.ajaxSetup({ cache: false }); 
    }); 


    response.php 


    $users = $_GET['names']; 
    $users = json_decode($users); 
    echo "user: $users"; 

    $names = $users; 
    foreach ($names as $name) { 
    ... 

ライン33にresponse.phpでのforeach()のために供給無効な引数、およびエコーが空である

何が欠けていますか?

答えて

1

PHPからJavaScriptに配列/オブジェクトを渡すには、json_encode()/json_decode()関数を使用します。

+0

ありがとうございました!私はマニュアルを辿ってスクリプトを修正しましたが、javascriptによって生成されたURLから配列を再度取得する方法については今問題があります。編集した質問をご覧ください、ありがとうございます! – Adry

1

コードが機能しません。あなたは

$arr = array('a', 'b', 'c'); 
echo $arr; 

を持っている場合は、実際に出力として

Array 

を取得します。配列の内容ではありません。 「出力」JSへのPHPから配列、あなたはjson_encodeの出番であるネイティブのJavascript、に変換する必要があります。

<?php 
$arr = array('a', 'b', 'c'); 
?> 
var js_array = <?php echo json_encode($arr) ?>; 

一般的なルールとして

var js_array = ["a","b","c"]; 

が生成されますされ、いつでもPHPを使用してJavaScriptコードを生成し、JavaScript値をPHP値で埋めている場合は、json_encodeを使用して、有効なJavaScriptを生成していることを確認してください。クライアントがそれを実行しようとすると、構文エラーとJavaScriptコードブロック全体が死んでしまう。

+0

ありがとうございましたMarc B.私の問題は、PHPのコールバックファイルで配列を返す方法を今使用できる方法で渡すことだと思います。私は別の手がかりを与えることができれば、私の質問を編集してあなたのアイデアを伝えます。ありがとう! – Adry

+0

「JSON.stringify」(http://www.json.org/js.html)にJSサイドの 'json_encode()'を実行すると、url-encodeしてクエリ文字列に入れることができます...長いクエリ文字列がブラウザとサーバーによって切り捨てられるので、これを転送するためにpostを使用することを検討してください。 –

+0

こんにちはマークBは、URLを自動的に更新されるようにファイルを呼び出すために使用するので、私はこれを承認するためにPOSTをどのように使うことができますか?私はこのような信念をもって論理を構築する方法を知らないのですが、あなたは私に例を挙げることができますか? – Adry

関連する問題