【问题标题】:Error while getting a value from URL using PHP and send it to javascript variable使用 PHP 从 URL 获取值并将其发送到 javascript 变量时出错
【发布时间】:2017-11-26 22:38:23
【问题描述】:

我正在尝试使用 $_REQUEST 从 url 获取一个 php 变量到 javascript,以便我可以通过 Ajax 发送它。

在我的页面顶部我有:

<?php
  include_once('../php/connection.php');
  include_once('../php/getDiagnosis.php');
  $pid = $_REQUEST['pid'];

?>

在 Java 脚本部分我有:

  <script src="../js/history.js"></script>

在 history.js 中:

var addHistory = function()
{
  var patient_medication = $("#patient_medicationn").val();
  var disease = $("#disease").val();
  var patient_side_effect = $("#patient_side_effect").val();

  var pid = '<?php echo $pid;?>';
  console.log(pid);

  if(disease=="select")
  {
    $("#disease").css('border-color', 'red');
    $("#disease").focus();
  }

  else
  {
    $.ajax({
      url: '../php/history.php',
      data: {pid: pid, patient_medication: patient_medication, disease: disease, patient_side_effect: patient_side_effect},
      type: 'POST',
      dataType: 'TEXT',

      success:function(resp)
      {

      },
      error:function(resp)
      {
        alert("Information have not been added, please try again");
      }
    })
  }
}
$(document).ready(function()
{

  $("#add_history").on('click', addHistory);
  $("#patient_medication").on('keypress', function(event)
  {
    if(event.which==13)
    {
        $("#add_history").click();
    }
  })
  $("#patient_side_effect").on('keypress', function(event)
  {
    if(event.which==13)
    {
        $("#add_history").click();
    }
  })
});

控制台中的结果是:

【问题讨论】:

  • 你的JS文件可能没有在服务器端编译,所以PHP代码没有执行。
  • 有办法解决吗?
  • 有一个很好的方法来解决它 - 请检查我的答案。
  • 请确保您的 history.php 检查发出请求的用户是否有权查看他们要求的历史记录。否则任何人都可以通过拥有 pid(或猜测它)来获取历史记录。您可以使用会话变量来做到这一点。

标签: javascript php jquery pdo


【解决方案1】:

你不能这样做。可能的方法是创建一个可从您的 JS 文件访问的全局变量。在这行之前

<script src="../js/history.js"></script>

添加这个

<script>var pid = '<?php echo $pid;?>';</script>

现在 pid 在 JS 文件中可用。

【讨论】:

    【解决方案2】:

    你的 JS 文件可能没有在服务器端编译,所以 PHP 代码没有被执行。

    一种解决方法是使用隐藏字段。

    在您的 HTML 页面(可能已编译)中,您可以执行以下操作:

    <input type="hidden" name="someField" id="someField" value="<?php echo $pid; ?>">
    

    在你的 JS 文件中,你可以这样做:

    var pid = $('#someField').val();
    

    【讨论】:

      【解决方案3】:

      正如@Peter m 所说,默认情况下不解析您的 .js 文件,您可以更改 Apache 配置以解析 .js 文件(不推荐)。 我会做什么,只需将您的变量设为全局变量并在 php 文件中定义它或将变量作为参数传递给函数。

      【讨论】:

      • 或者你可以包含一个 php 文件,就像它是一个 js 文件一样 - 检查我的答案。
      【解决方案4】:

      你可以通过 3 个小改动来做到这一点:

      改变这个:

      <script src="../js/history.js"></script> 
      

      到这里:

      <script type="text/javascript" src="../js/history.php?pid=$pid"></script>
      

      然后将history.js重命名为history.php。

      编辑开始

      你之前的 js 文件的前 4 行,现在 history.php 应该是:

      <?php
          header('Content-Type: application/javascript');
          $pid = $_GET['pid'];
      ?>
      

      编辑结束

      测试它 - 它应该可以工作。

      无需重新配置 apache 即可解析 js——同样将所有 js 文件解析为 php 文件会大大增加服务器负载。

      这样,浏览器会将其视为 js 文件,并且服务器上没有额外的负载。

      【讨论】:

        【解决方案5】:

        对于安全和代码维护问题,切勿将服务器端与客户端混为一谈 以这种方式编码, 将变量作为方法属性传递

        JS:

        var addHistory = function(pId){
           // treat as attribute
           // ...
        }
        

        启动 JS:

        $(document).ready(function(){
        
        
        // some generic function used to parse url
        // You can google JS url parser library for more functionality
        function getQueryParam(url, key) {
          var queryStartPos = url.indexOf('?');
          if (queryStartPos === -1) {
            return;
          }
          var params = url.substring(queryStartPos + 1).split('&');
          for (var i = 0; i < params.length; i++) {
            var pairs = params[i].split('=');
            if (decodeURIComponent(pairs.shift()) == key) {
              return decodeURIComponent(pairs.join('='));
            }
          }
        }
        // use on click, bind clicks to body avoiding future event collisions
        $('body').on('click','#add_history', addHistory, function(){
           // get parameter from url
           var pId = getQueryParam(window.location, 'pid');
           addHistory(pId); 
        });
        
        });
        

        【讨论】:

          猜你喜欢
          • 2018-01-14
          • 2018-12-05
          • 2015-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-11
          • 1970-01-01
          相关资源
          最近更新 更多