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

时间:2017-06-23 11:04:58

标签: javascript php jquery pdo

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

在我的页面顶部,我有:

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

?>

在Java Script Part中我有:

  <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();
    }
  })
});

控制台中的结果是:

  

5 个答案:

答案 0 :(得分:2)

您的JS文件可能未在服务器端编译,因此不会执行PHP代码。

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

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

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

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

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

答案 1 :(得分:1)

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

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

添加此

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

现在pid在JS文件中可用。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

你可以通过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文件,服务器上没有额外负载。

答案 4 :(得分:1)

对于安全性和代码维护问题,永远不要将服务器端与客户端混合 代码以这种方式, 将变量作为方法属性传递

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); 
});

});