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

时间:2014-09-25 11:35:32

标签: javascript php jquery ajax modal-dialog

所以,我试图在这里解决一个非常简单的问题但是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 -->

modes.php另一个文件 这段代码绝对不正确,我试图从之前的解决方案中获取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)

,我只想提一下

1 个答案:

答案 0 :(得分:3)

正如您所知,它不会按原样运作,但让我试着解释原因。这里存在一些概念问题,在你理解它们之前会一直困扰着你。

将PHP与JavaScript混合

您需要了解的最重要的事情是如何混合使用JavaScript和PHP。这是巨大的。您可以将JavaScript和PHP放在同一个文件中,但不是您想象的那样。让我告诉你。

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

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

现在,您可能会认为当您在浏览器中加载该文件时,当您单击带有ID test-button 这是一个测试 >,对吗?不太好!

实际发生的是您的Web服务器查看该文件并说,&#34;嗯,我在这里看到PHP标签。在将文件发送到网络浏览器之前,我会更好地处理这些文件。&#34;所以它开始工作了。它回应这是一个测试,因为它在click回调中被告知。并且在将文件发送到浏览器之前执行此操作。因此,当您将 加载到Web浏览器中时, 最终的文件如下所示:

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

请参阅?没有PHP标签!在JavaScript有机会运行之前,PHP已经被执行了。 PHP事先由服务器运行。 (在这种情况下,我们最终会在浏览器中显示错误。This is a test不是有效的JavaScript!)

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

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

说我有下面的JavaScript。我想问服务器玛丽最喜欢的颜色。当服务器告诉我时,我想要显示一个警告说它是什么。这是我在JavaScript文件中如何做到这一点。想象一下,它位于script标签的 index.php 中。

(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. 浏览器说,&#34;嘿,网络服务器,我需要index.php。&#34;
  2. 服务器说,&#34;好的,index.php。啊,这是它!让我看看。任何PHP标签?没有,所以在我发送给你之​​前没什么可渲染的。好的,你走了!&#34;
  3. 浏览器获取文件并找出如何在屏幕上显示HTML。它也运行任何JavaScript。
  4. 当JavaScript运行时,字符串Mary以JSON格式发布到color.php。这意味着请求被发送到服务器:&#34;我需要将一些数据发送到color.php,好吗?&#34;服务器说,&#34;当然!我将传递该数据并执行PHP文件中的任何代码。&#34;
  5. 因此在服务器上运行PHP文件。设置了名称和喜欢的颜色的关联数组。
  6. 在PHP文件的最后一行,服务器使用密钥$people(jQuery发送的$_POST['person']的值)在person中查找值。
  7. 服务器获取值并说,&#34;我将其重新编码为JSON格式,以便JavaScript可以立即使用它。&#34;
  8. 回到浏览器中,没有发生任何事情。浏览器正在等待来自服务器的响应。
  9. 响应到了! done回调运行。
  10. done回调中,变量data包含服务器发回的JSON编码数组。该数组有两个键,请记住:namecolor。我们现在可以data
  11. 使用这些内容
  12. 使用data中的值弹出警告,告诉我们玛丽最喜欢的颜色。
  13. 您的示例

    现在让我们看看您的代码。在第8行,您将变量z发布到modes.php。然后你有一个回调说,&#34;当数据发送成功后,做一些事情。&#34;到现在为止,你可能会猜到为什么它不能按原样运作。在JavaScript文件甚至进入浏览器之前,PHP已经运行。当PHP事先运行时,$_GET['z2']没有设置。

    因此,不要将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.phpmodes.php在服务器上运行并返回一个值。然后,jQuery中的回调可以使用该值来执行任何操作。

    我希望这是有道理的!随意问我这里发生了什么。