使用 PHP 从 URL 获取值并将其发送到 javascript 变量时出错

Posted

技术标签:

【中文标题】使用 PHP 从 URL 获取值并将其发送到 javascript 变量时出错【英文标题】:Error while getting a value from URL using PHP and send it to javascript variable 【发布时间】: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代码没有执行。 有办法解决吗? 你应该试试这个链接。它将更可排序。 https://***.com/questions/9653651/including-php-variables-in-an-external-js-file 有一个很好的方法来解决它 - 请检查我的答案。 请确保您的 history.php 检查发出请求的用户是否有权查看他们要求的历史记录。否则任何人都可以通过拥有 pid(或猜测它)来获取历史记录。您可以使用会话变量来做到这一点。 【参考方案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); 
);

);

【讨论】:

以上是关于使用 PHP 从 URL 获取值并将其发送到 javascript 变量时出错的主要内容,如果未能解决你的问题,请参考以下文章

从 iOS 安全发送 PHP 获取信息

如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?

在选择选项中获取所选项目的 id 并将其发送到 URL

如何从 URL 获取值并将其添加为联系表 7 中的隐藏字段

将数据从 javascript forEach 循环中的 php 数组发送到 ajax 调用的 url

如何从 api 获取 json 数据并将其以嵌入形式发送到 discord.py 中?