如何创建值数组并从 PHP 调用 JavaScript 函数

Posted

技术标签:

【中文标题】如何创建值数组并从 PHP 调用 JavaScript 函数【英文标题】:How to create an array of values and call a JavaScript function from PHP 【发布时间】:2018-08-21 23:37:26 【问题描述】:

我需要创建一个从 Parse Server 查询中获取的值数组,并调用一个 JS 函数,该函数在自定义 Google 地图上显示标记和 infoWindows。

这不是关于服务器端的问题,而是关于如何创建数组并将其传递给 php 中的 JS 函数的问题。

这是我执行查询的地方:

try 
    $query = new ParseQuery("Monsters");
    $mArray = $query->find();    

    for ($i = 0;  $i < count($mArray); $i++) 
        // Get Parse Object
        $mObj = $mArray[$i];

        // Get name
        $mName = $mObj->get('name');
        // Get location
        $mLocation = $mObj->get('location');
        $mLat = $mLocation->getLatitude();
        $mLng = $mLocation->getLongitude();
        // Get points
        $mPoints = $mObj->get('points');

        // Here i need to make an array of $mName + $mPoints + $mLat + $mLng and call the addMonstersOnMap() JS function...
        But my array should be like:
        [name, points, 40.7143850, -72.0059756],
        [name, points, 30.7143850, -44.0059756],
        etc..

    

// error in query
 catch (ParseException $e) echo $e->getMessage();  

这是我的 JS 函数(我不知道如何将 monsters 数组传递给它并调用它):

function addMonstersOnMap(monsters)  // monsters IS THE ARRAY I NEED TO GET FROM MY PHP QUERY!

    var centerCoords = new google.maps.LatLng(66.93828964, -53.64523124);

    var mapOptions = 
                zoom: 2,
                scrollwheel: true,
                center: centerCoords,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            

            var map = new google.maps.Map(document.getElementById('mapCanvas'), mapOptions);

            var marker, i;
            var infowindow = new google.maps.InfoWindow();

            // Add marker for each Monster
            for (i = 0; i < monsters.length; i++) 

                marker = new google.maps.Marker(
                    position: new google.maps.LatLng(monsters[i][1], monsters[i][2]),
                    map: map,
                    icon: monsters[i][3]
                );


                // click function to marker, pops up infowindow
                google.maps.event.addListener(marker, 'click', (function(marker, i) 
                    return function() 
                        infowindow.setContent(monsters[i][0]);
                        infowindow.open(map, marker);
                    
                )(marker, i));

            // end FOR loop

    google.maps.event.addDomListener(window, 'load', initialize);


【问题讨论】:

What is the difference between client-side and server-side programming?的可能重复 How to pass variables and data from PHP to javascript?的可能重复 都不是,是关于如何制作一个数组并传递给特定的JS函数 然后将问题实现为您真正想做的事情。 PHP 代码中间的“调用 addMonstersOnMap() JS 函数”说,你想从 PHP 中调用一个 JS 函数,这是不可能的,为什么会这样,在链接的副本。 是的,您可以将其作为文本包含在内,但您不能执行它。正如您从链接的帖子中所读到的:“[PHP] 的最终最终目标是……[to] 生成 html 字符串”。 PHP 代码中的 JavaScript 只不过是文本,它只是 HTML 字符串的一部分,根本无法执行。 【参考方案1】:

你有两个选择。

一、发送到ajax请求页面不充值 您的 php 函数将返回矩阵

 $.ajax(
    url: "file.php", // your file path where are the php code
    success: function(result) // the result is the matrix
        //your code function addMonstersOnMap
    );

或两次从 php 写入 js 并在页面重新加载时更新值 在页面视图的代码中发送矩阵,然后这样写

 <?php
    echo '<script> addMonstersOnMap('.$matrix.') ;</script>';
    ?>

【讨论】:

对不起,我该如何创建这样的数组:['name', 20.354354, -12.566465], ['name', 20.235234, -12.356789], etc...

以上是关于如何创建值数组并从 PHP 调用 JavaScript 函数的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历数组并从每个键创建 PHP 中的 HTML 锚点

如何运用PHP函数array

BigQuery - 如何取消嵌套多个数组,并从一列分配值?

C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]

如何在一种方法中为数组赋值并从另一种方法调用

如何创建 JTextField 数组并从 String 数组中检索文本?