在javascript代码中运行php函数

时间:2013-11-17 14:43:52

标签: javascript php jquery

我希望在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','')

2 个答案:

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