我正在尝试使用$_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();
}
})
});
控制台中的结果是:
答案 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);
});
});