【问题标题】:change php variable with ajax用ajax改变php变量
【发布时间】:2014-01-01 13:57:53
【问题描述】:

我有一个这样的 php 变量:

PHP 代码:

$php_value = 'Am from PHP';  

并且我希望能够使用 jQuery 更改此变量并且 jQuery 在同一页面上?

【问题讨论】:

  • 您无法更改硬编码变量。您只能将 GETPOST 变量传递给 PHP。

标签: php jquery ajax


【解决方案1】:

你不能。

当页面被传送到浏览器并运行 JavaScript 时,生成页面的 PHP 程序将运行完毕,变量将不再存在。

JavaScript 将允许您将新数据发送到服务器(Ajax),服务器可以将数据存储在某处(通常是数据库)并读取响应。

JavaScript 还允许您在浏览器 (DOM) 中修改页面(包括 Ajax 请求响应中包含的数据)。

【讨论】:

    【解决方案2】:

    PHP 代码在服务器端运行,而 jQuery 在客户端运行。从 jQuery 更新 PHP 变量的方法是使用 jQuery 调用提交到 PHP 页面,并让 PHP 查找它:

    $php_value = 'Am from PHP';  
    if exists($_POST['php_value_from_jquery']) {
       $php_value = $_POST['php_value_from_jquery'];
    }
    

    【讨论】:

      【解决方案3】:

      如果我正确理解您的问题,AJAX 无法将数据发布到同一页面上的 PHP 代码。 有人告诉我它可以,但这不是微不足道的——我仍然无法想象这是怎么可能的。无论如何,如果使用辅助 PHP 文件,AJAX 很容易。

      这是我的意思的一个例子。如果你试试这个:

      <?php
          echo 'Hello';
      ?>
      
      <html>
      <head>
          <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <script type="text/javascript">
              $(document).ready(function() {
                  $.ajax({
                      type: 'POST',
                      url: '',
                      success: function(data) {
                          alert(data);
                      }
                  });
      
              }); //END $(document).ready()
      
          </script>
      </head>
      <body>
      
      
      </body>
      </html>
      

      弹出窗口将包含页面的 HTML。


      但是,如果你使用两个文件:

      file1.php

      <?php
          echo 'Hello';
      ?>
      

      file2.php

      <html>
      <head>
          <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
          <script type="text/javascript">
              $(document).ready(function() {
                  $.ajax({
                      type: 'POST',
                      url: 'file1.php',
                      success: function(data) {
                          alert(data);
                      }
                  });
      
              }); //END $(document).ready()
      
          </script>
      </head>
      <body></body>
      </html>
      

      弹出窗口将只包含单词“Hello”。

      要使用 ajax,必须调用外部 PHP 文件。


      在考虑了上述之后,请注意昆汀的回答很重要——即使你使用 AJAX 在服务器上设置 PHP 变量,该变量在 AJAX 完成后消失——就像 PHP 变量在你的 @987654324 之后消失一样@ 已完成渲染 DOM 并将其呈现给访问者的浏览器。

      那么,该怎么办?两种选择。

      (1) 正如 Quentin 指出的,您可以将值永久存储在数据库中,或者

      (2) 您可以使用 PHP 超全局变量,例如 $_SESSION 变量。例如:

      客户端:file2.php

      var storeme = "Hello there";
      $.ajax({
          type: 'POST',
          url: 'file1.php',
          data: 'stored_on_server=' +storeme,
          success: function(data) {
              alert(data);
          }
      });
      

      file1.php

      <?php
          session_start();
          $SESSION['a_variable_name'] = $_POST['stored_on_server'];
      

      您可以稍后检索该变量值:

      $.ajax({
          type: 'POST',
          url: 'file3.php',
          success: function(data) {
              alert(data); //a popup will display Hello There
          }
      });
      

      file3.php

      <?php
          session_start();
          echo $SESSION['a_variable_name'];
      

      【讨论】:

        【解决方案4】:

        您无法使用 javascript 更改 php 值。即服务器脚本在客户端脚本生效后首先运行,在这种情况下您无法修改相同的脚本,因为它们已经在浏览器中呈现

        【讨论】:

          【解决方案5】:

          如果 jQuery 将要处理数据,那么您可以将 PHP 变量分配给 jQuery 变量,如下所示:

          <script>
              var jquery_value = <?php echo $php_value; ?>
          </script>
          

          据我所知,因为 jQuery 是客户端,而 php 是服务器端,所以无法将 jQuery 变量分配回 PHP。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-20
            • 2016-12-23
            • 2016-08-31
            • 2015-09-30
            • 2013-01-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多