繁体   English   中英

如何使用jQuery / javascript从一个文件到另一个文件获取php变量?

[英]How to get a php variable from one file to another maybe using jQuery/javascript?

因此,我试图在这里解决一个非常简单的问题,但是4小时后的最好时机我仍然不知道。 我只想将变量z转换为php,以便可以在数组中使用该值。 目前,我已经设法将值转换为另一个文件中的php,现在我需要将其恢复为原始文件以供使用,这就是我碰壁的地方。 我在下面包含了相关代码。

orders2.php使用z的javascript值,并使用另一个文件将其设置为PHP

(function($) {  

    $(document).on('click', '.rowclick',function() {
        var z = 2;
        alert(z);


    var post = $.post('../../wp-content/themes/alma-child/includes/modes.php',{z:z});
    post.done(function(data){

    <?php 
         $rownum = $_GET['z2'];
         echo "nei";
    ?>

    })
      $("#myModal1").modal();       

        });


    })(jQuery);

orders2.php中的模态部分

<div id="myModal1" class="modal" tabindex="-1">
<div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-body">
            <div class="account_modal_body">
                <button class="close" type="button" data-dismiss="modal">Close Window</button>
                <div id="missing">
                    <form action="#" id="form" method="post" name="form">
                        <div id="printthis">
                            <h2>Track Mastering Details</h2>
                            <label>Track Name</label>
                            <div class="subsec">
                                <?php echo $waiting[$z2][0] ?>
                            </div>
                            <label>Artist</label>
                            <div class="subsec">
                                <?php echo $waiting[$z2][1] ?>
                            </div>
                            <label>Duration</label>
                            <div class="subsec">
                                <?php echo $waiting[$z2][2] ?>
                            </div>
                            <label>ISRC</label>
                            <div class="subsec">
                                <?php echo $waiting[$z2][3] ?>
                            </div>
                            <label>Mastering Notes</label>
                            <div class="subsec">
                                <?php echo echo $waiting[$z2][4] ?>
                            </div>
                        </div>
                    </form>

                </div>
                <button class="close" id="print" type="button">Print</button>
                </br>
            </div>
        </div>

    </div>
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->

这个文件绝对是不正确的,我尝试从以前的解决方案之一中获取jQuery,但是不确定它是如何工作的

<?php $z2=$ _POST['z']; ?>
<div id="uploads">
    <?php echo $z2; ?>
</div>

<script>
    jQuery('#uploads').load('orders2.php?account=<?php echo($z2);?>');
</script>

注意:我意识到这可能不是执行此操作的最佳方法,因此将JavaScript变量转换为php的任何其他解决方案将不胜感激。 另外,只需提一下,我希望页面不刷新(因此javascript)

如您所知,它不会按原样工作,但让我尝试解释原因。 这里有一些概念性问题,这些问题会一直困扰您,直到您了解它们为止。

将PHP与JavaScript混合

您需要了解的最大的事情是如何混合使用JavaScript和PHP。 这是巨大的。 可以将JavaScript和PHP放在同一个文件中,但不能采用您认为的方式 让我演示给你看。

这是一个使用jQuery的简单PHP文件。 它包含JavaScript和PHP。

(function($) {
    $('#test-button').click(function() {
        <?php echo 'This is a test'; ?>
    });
})(jQuery);

现在,您可能会认为,当您在浏览器中加载该文件时,PHP会回显这是单击ID为test-button的HTML元素时的测试 ,对吗? 不完全的!

实际发生的是您的Web服务器查看该文件并说:“嗯,我在这里看到PHP标记。在将文件发送到Web浏览器之前,最好对其进行处理。” 这样就可以了。 呼应这是一个考验 ,因为它是被告知,就在里面click回调。 在将文件发送到浏览器之前执行此操作。 所以, 最终当你加载到Web浏览器与文件看起来是这样的:

(function($) {
    $('#test-button').click(function() {
        This is a test
    });
})(jQuery);

看到? 没有PHP标签! 在没有机会运行JavaScript之前,PHP已经被执行。 PHP事先由服务器运行。 (在这种情况下,我们最终会在浏览器中出错。 This is a test无效的JavaScript This is a test !)

如何在PHP和jQuery之间共享数据

因此,如果PHP在服务器上运行,如何在jQuery和PHP之间共享数据? 答案是使用$.post ,您已经在这样做了。 您只需要稍微调整一下。 这是一个例子。

说我有下面的JavaScript。 我想向服务器询问玛丽最喜欢的颜色。 服务器告诉我时,我想显示一个警报来说明它是什么。 这是我在JavaScript文件中执行此操作的方法。 想象一下,在index.php文件 ,在script标签。

(function($) {
    var name = "Mary";
    $.post("color.php", { person: name })
    .done(function(data) {
        alert(data.name + "'s favorite color is " + data.color + "!");
    });
})(jQuery);

您会注意到,我们还引用了一个PHP文件color.php 因此,我们也必须创建它。 这是color.php中的代码可能如下所示:

<?php
$people = array(
    'Eric' => 'blue',
    'Freddie' => 'orange',
    'Mary' => 'blue',
    'Pedro' => 'green'
);

echo json_encode(array(
    'name' => $_POST['person'],
    'color' => $people[$_POST['person']],
));

幕后工作原理

那么,这一切如何运作? 这是当您在上面的示例中访问页面时发生的情况的细分。

  1. 浏览器说:“嘿,Web服务器,请使用index.php。”
  2. 服务器说,“好的,index.php。啊,就在这里!让我看看。任何PHP标记?不,在我将其发送给您之前,没有任何可呈现的内容。好的,您来了!”
  3. 浏览器获取文件并弄清楚如何使HTML在屏幕上显示。 它也可以在其中运行任何JavaScript。
  4. 当JavaScript运行时,字符串Mary以JSON格式发布到color.php 这意味着将向服务器发送一个请求:“我需要向color.php发送一些数据,好吗?” 服务器说:“当然!我将传递这些数据并执行PHP文件中的所有代码。”
  5. 因此,在服务器上,PHP文件运行。 设置名称和喜欢的颜色的关联数组。
  6. 在PHP文件的最后一行,服务器使用键$_POST['person'] (jQuery发送过来的person的值)在$people查找值。
  7. 服务器获取该值并说:“我将其编码回JSON格式,以便JavaScript可以立即使用它。”
  8. 回到浏览器,什么也没发生。 浏览器只是在摇晃拇指等待服务器的响应。
  9. 响应到达! done回调运行。
  10. done回调中,变量data保存服务器发送回的JSON编码数组。 该数组有两个键,请记住: namecolor 这些现在可以在data
  11. 使用data的值弹出警报,告诉我们玛丽最喜欢的颜色是什么。

你的例子

现在让我们看看您的代码。 在第8行上,将变量zmodes.php 然后,您将收到一个回调,其中说:“成功发送数据后,请执行一些操作。” 到现在为止,您可能已经猜出了为什么它无法按原样工作。 该PHP已经在JavaScript文件甚至尚未进入浏览器之前就已运行。 而且,当PHP预先运行时,未设置$_GET['z2']

因此,不要将PHP放入回调中,而modes.php其放入modes.php modes.php可以处理您发布到它的数据。 您可以使用如下所示的内容:

// z is available in $_POST['z']. This is an example of using it to look up a row
// representing a blog post in your database if you had a Post model class
$row = Post::findByPrimaryKey($_POST['z']);
echo json_encode($row->toArray());

然后,第一个代码段中的代码可能如下所示:

// ...

var post = $.post('../../wp-content/themes/alma-child/includes/modes.php',{z:z})
.done(function(data){
    alert(data.title);
});

// ...

结论

简而言之,从您的jQuery发布到modes.php modes.php在服务器上运行并返回一个值。 然后,jQuery中的回调可以使用该值执行您想要的任何操作。

我希望这是有道理的! 随时问我任何有关这里发生的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM