【问题标题】:Passing a php array to a javascript array inside a PHP function将 php 数组传递给 PHP 函数内的 javascript 数组
【发布时间】:2017-11-07 14:51:25
【问题描述】:

我知道这个问题在 StackOverflow 上被问了很多,虽然我找不到任何可以应用于我的问题的解决方案。

我正在开发一个重新组合我公司所有视频和图片的平台(我将在我的前同事之后收回该项目),我的问题在于显示图片的灯箱。

我有一个 PHP 函数,它以这样的字符串格式返回 HTML/CSS/Javascript:

$block = '<div id="myModal" class="modal" style="margin:auto">'
            .'<span style="float:right;margin-right:33px"><a href="'.HTTP_IHM_PATH.'Suppression.php?id='.$records[$i]['Access_Key'].'" onclick="return confirm(\'Êtes-vous sûr de vouloir continuer cette suppression ? Elle sera définitive.\');"><img src="'.HTTP_IMG_PATH.'corbeille.jpg" style="width:20px;height:auto;"></a></span>'
            .'<span class="close cursor" onclick="closeModal()" style="color:#585858; font-size:60px;float:right;">&times;</span>'
[...]
return $block;

我这样调用函数:&lt;?php echo function() ?&gt;

在这里,我有一个 PHP 数组 $records,其中包含有关我要在 LightBox 中显示的图片的所有信息,我希望稍后在我的代码中将这些信息用于我的 javascript 函数中。

我听说我可以使用 &lt;script&gt;var records = &lt;?php json_encode($records) ?&gt;&lt;/script&gt; 翻译 javascript 中的数组,但它不起作用!

最后我想要做的是当用户点击一张图片时,它会打开我的 LightBox 并且对于他正在观看的每张图片,我想调用我的 php 函数 UpdateViews() 将数量加 1图片的视图。

我尝试使用 Ajax,但由于它对我来说很新,我可能会犯一些愚蠢的错误(这仍然是变量 $block 中的字符串格式):

$block .= '//getSlideIndex returns slideIndex wich is the id of the <img/>
$(\'#\' + getSlideIndex()).on(\'click\', function (){
                    alert("Ok onclick" + records[getSlideIndex()]["Access_Key"];
                    //"Access_Key" is the property I need (primary key of the table)
                    $.ajax({
                        type:\'GET\',
                        url: \'/picture.php\',
                        data: {id=\' + records[getSlideIndex()]["Access_Key"] + \'},
                        success: function(data){
                            alert(\'success\' + data);
                        },
                        error: function(exception){
                            alert(\'Exception: \' + exception);
                        }
                    });
                    e.preventDefault();
                });';

注意:我的前同事已经在他的代码中使用了一些 Ajax,所以当我在这个页面上时,已经设置了 $_GET:在这种情况下我可以让我的 ajax 工作吗?

感谢您阅读到此为止,希望您能帮助我走上正轨。

【问题讨论】:

  • 成为那个的人:请考虑分离前端和后端,使用 PHP 部分的端点获取 JSON。这样,就不会变成这样复杂的一团糟了。对不起,我很迂腐。

标签: javascript php arrays json ajax


【解决方案1】:

我听说我可以使用&lt;script&gt;var records = &lt;?php json_encode($records) ?&gt;&lt;/script&gt; 翻译javascript 中的数组,但它不起作用!

这非常接近。这将使 JavaScript 变量 成为 JSON string。然后,您可以使用 JavaScript 的 JSON parse 将该 JSON 字符串转换回数组/对象。

完成所有这些操作后,您将拥有一个 JavaScript 数组,其中包含从您的 PHP 数组传递的数据。

【讨论】:

    【解决方案2】:

    我听说我可以使用&lt;script&gt;var records = &lt;?php json_encode($records) ?&gt;&lt;/script&gt; 翻译javascript 中的数组,但它不起作用!

    这不起作用,因为您没有echo 结果,您只是在运行 JSON 进程,然后丢弃结果。添加回声:

    <script>var records = <?php echo json_encode($records) ?></script>
    

    与其他答案相反,不要尝试JSON.parse this,因为它已经是一个有效的 JavaScript 对象。

    编辑:如果您尝试将 JSON 连接到响应字符串,则不要使用 &lt;?php 标签,而是可以这样做:

    $block .= '<script>var records = ' . json_encode($records) . '; </script>';
    

    【讨论】:

    • 感谢您的回答!我仍然收到一个错误:SyntaxError: expected expression, got '&lt;'。如何使代码在 激活
    猜你喜欢
    • 2014-06-11
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 2011-05-16
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多