使用 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 变量时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?