将数据从PHP发送到JavaScript

4

我有一个关于从php传输数据到javascript的问题。我从数据库中收集了一些数据,并且将它们格式化为以下形式:

for($i=0;$i<(sizeof($lt_periods_query['period_id']));$i++){

    $period_id   = $lt_periods_query['period_id'][$i];
    $lt_id       = $lt_periods_query['lt_id'][$i];
    $period_name = $lt_periods_query['period_name'][$i];
    $fDate       = $lt_periods_query['fromDate'][$i];
    $tDate       = $lt_periods_query['toDate'][$i];
    $minStay     = $lt_periods_query['min_stay'][$i];
    $nightly_rate= $lt_periods_query['nightly_rate'][$i];

    if (strStartsWith($fDate, $currentYear)=='true'){
        $year = $currentYear;
    } else if(strStartsWith($fDate, $nextYear)=='true'){
        $year = $nextYear;
    }

    $temp_period_details   =  array();
    $temp_period_details['period_id'] = $period_id;
    $temp_period_details['lt_id'] = $lt_id;
    $temp_period_details['period_name'] = $period_name;
    $temp_period_details['fromDate'] = $fDate;
    $temp_period_details['toDate'] = $tDate;
    $temp_period_details['min_stay'] = $minStay;
    $temp_period_details['nightly_rate'] = $nightly_rate;

    $periods[$year][$period_name] = $temp_period_details;
}

当我像这样打印时,我可以看到它们:

echo "RULE for 6 days <br>";
$days= '5';
$selPeriod = 'off_peak';
$selYear = '2011';
echo $periods[$selYear][$selPeriod]['period_id'];
echo "<br>";
echo $periods[$selYear][$selPeriod]['lt_id'];
echo "<br>";
echo $periods[$selYear][$selPeriod]['period_name'];

我知道php工作在服务器端,而javascript工作在客户端。我想通过发送一些参数从javascript端获取数据,就像这样(我知道为什么这不起作用,但我不知道如何实现这样的数据传输):

    <script type="text/javascript">

    $(function(){

        getData();

        function getData(){

            var days= '5';
            var selPeriod = 'off_peak';
            var selYear = '2011';


            //var xxx     = '<?php echo $periods[\''+selYear+'\'][\''+selPeriod+'\'][\'fromDate\'] ;?>';
            //var xxx = '<?php include($periods['2011']['off_peak'][''])?>;

        }

    });

请问有什么方法可以通过发送一些参数从php到javascript中收集数据。

3个回答

19

要将PHP中的数据结构传递给Javascript,可以像这样注入一个JSON值:

<?php
     $xdata = array(
          'foo'    => 'bar',
          'baz' => array('green','blue')
     );
?>
<script type="text/javascript">
    var xdata = <?php echo json_encode($xdata); ?>;

    alert(xdata['foo']);
    alert(xdata['baz'][0]);

    // Dot notation can be used if key/name is simple:
    alert(xdata.foo);
    alert(xdata.baz[0]);
</script>

这可以用于正确转义标量、数组、对象等。


1
这是我使用的解决方案。另一段代码也起作用了。但我无法将数组分配给公共变量。非常感谢。 - user403295
嗨Hallman,希望你看到我的消息。我需要与昨天相同问题有关的一些帮助。你能告诉我这个“xdata”是什么类型的变量吗?它看起来是一个公共变量,但我无法从其他方法中调用和使用它。有些方法可以,但有些方法不能让我调用它。我有一个日历,在mouseover事件上,我调用这个数组,但它不会从中提取变量。原因可能是什么,我该如何解决。提前感谢。Ozlem。 - user403295

1

简单的 AJAX 方法。

将所有数据放入一个数组中。然后使用 json_encode 将您的数据编码为 JSON 格式。

$data_array = array();

//assigning your data to single array here
$data_array['param1'] = 'value1';

echo json_encode($data_array);

然后在您的JavaScript代码中使用AJAX调用您的脚本。例如,可以使用强大的jQuery库(http://api.jquery.com/jQuery.getJSON/)。

<script type="text/javascript">    

$.getJSON('http://www.example.com/my_script.php', function(data) {
    alert(data.param1); //this should alert 'value1'
});

我得到了类似这样将数组转换为JSON对象的东西...希望你能清楚地看到它。正如你所看到的,首先变量是数字,我需要根据用户的选择提取相关年份的数据。你能帮我动态地从这个数组中获取数据吗?例如 year:2011 season:peak(假设年份和季节是我要使用的变量。) - user403295
这是我无法放在之前评论中的数据。(我已经缩短了数据) {"2010":{"peak":{"period_id":"8","lt_id":"1","period_name":"peak","fromDate":"2010-01-30","toDate":"2010-05-01","min_stay":"2","nightly_rate":"407.14"}, "off_peak":{"period_id":"9","lt_id":"1","period_name":"off_peak","fromDate":"2010-05-01","toDate":"2010-09-19","min_stay":"2","nightly_rate":"300.00"}}, "2011":{"peak":{"period_id":"4","lt_id":"1","period_name":"peak","fromDate":"2011-01-30","toDate":"2011-05-01","min_stay":"2","nightly_rate":"407.14"}}} - user403295
你可以使用类似对象和类似数组的方式在JavaScript中访问JSON数据(点击此处阅读更多:http://www.json.org/js.html)。在PHP中处理数组以满足你对数组的访问需求。 - Daimon

1

有AJAX方法和回显方法。前者更灵活,而后者则更简单,不需要处理AJAX错误。

对于前者,在许多地方都有如何使用AJAX的示例。后者可以很容易地实现:

<script type="text/javascript">
var phpVar = <?php echo ($phpVar); ?>;
</script>

哪种方法是合适的取决于你的JavaScript需要什么数据以及它需要用来做什么。如果你需要进行大量的服务器交互,那么使用AJAX是你应该研究的途径。然而,如果你只需要一个初始值来初始化一个JavaScript,那么后一种方法更容易实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接