我希望在javascript代码中运行一个php代码,我也喜欢这样:
<?php function categoryChecking(){
return false;
}?>
....
function openPlayer(songname, folder)
{
if(<?php echo categoryChecking() ?> == true)
{
if (folder != '')
{
folderURL = "/"+folder;
}else
{
folderURL = '';
}
var url = "/users/player/"+songname+folderURL;
window.open(url,'mywin','left=20,top=20,width=800,height=440');
}else{
alerte('you should click on a subcategory first');
}
}
....
<a href='javascript:void();' onClick="openPlayer('<?php echo $pendingSong['id']; ?>','')">
最后我得到了这个错误而不是警告消息“你应该先点击一个子类别”
ReferenceError: openPlayer is not defined
openPlayer('265','')
答案 0 :(得分:0)
您将测试用例缩小到太远,无法确定问题是什么,但鉴于您收到的错误消息,您的直接问题与PHP无关。
您尚未在调用它的onclick属性的范围中定义openPlayer
。据推测,早期的JS代码要么根本不在脚本元素内部,要么包含在一个函数中,该函数将对其进行范围化并防止它成为全局。
更新:@ h2ooooooo在评论中指出你的PHP正在生成JS:
if( == true)
检查浏览器的错误控制台。您需要首先处理第一个错误消息,因为它们可能会产生连锁反应。在这种情况下,脚本中的解析错误将导致函数无法定义。
但是,一旦解决了这个问题,您就会遇到problems with trying to write bi-directional code where some is client side and some is server side。
答案 1 :(得分:0)
您无法从JavaScript运行PHP代码,因为PHP是服务器端语言(在服务器上运行),而JavaScript是客户端语言(在您的浏览器中运行)。
您需要使用AJAX向PHP页面发送HTTP请求,然后您的PHP页面应该给出响应。使用AJAX发送HTTP请求的最简单方法是使用jQuery ajax()
方法。
创建一个PHP文件ajax.php
,并将此代码放入其中:
<?php
$value = false; // perform category check
echo $value ? 'true' : 'false';
?>
然后,在您的JavaScript代码中,您应该首先添加对jQuery的引用:
<script type="text/javascript" src="jquery.js"></script>
然后,使用此AJAX代码获取bool的值:
<script type="text/javascript">
$.ajax('ajax.php')
.done(function(data) {
var boolValue = data == 'true'; // converts the string to a bool
})
.fail(function() {
// failed
});
</script>
因此,您的代码应如下所示:
function openPlayer(songname, folder) {
$.ajax('ajax.php')
.done(function (data) {
var boolValue = data == 'true'; // converts the string to a bool
if (boolValue) {
if (folder != '') {
folderURL = "/" + folder;
} else {
folderURL = '';
}
var url = "/users/player/" + songname + folderURL;
window.open(url, 'mywin', 'left=20,top=20,width=800,height=440');
} else {
alert('you should click on a subcategory first');
}
})
.fail(function () {
// failed
});
}