使用jQuery的PHP变量。 PHP变量未定义如果使用jQuery但在页脚中使用jQuery代码时有效

时间:2011-06-24 22:01:12

标签: php jquery

我无法使用PHP变量来处理jQuery。

我在正文中定义了一个PHP变量,$ x并将其发送到PHP文件。 PHP文件echo是变量值。

在jQuery脚本中,我创建了一个Javascript变量:

 var test_php_variable = <?php echo $x; ?> ;  //$x is undefined, why?

执行此行代码时,似乎未定义$ x。我原以为是因为它包含在$(document).ready(function(){})中;标记,它将等待HTML主体中的PHP代码首先执行。

这行代码有效,但它不允许我使用变量:

var test_php_variable = <?php echo 10; ?> ;  // no problems with a constant

一个有趣的事情是,当我在HTML正文的末尾包含所有jQuery代码时,代码可以运行。

如果我在HTML头中使用此代码,为什么$ x会被定义?

HTML / jQuery代码:

<html>
<head>
    <!--load jQuery from Google -->
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>


    <script type ="text/javascript">
    //wait until the document is ready - maybe it is loading the javascript
    //before the document is ready?
    $(document).ready(function() {
        //the line of code below does not work, $x is not defined            
        var test_php_variable = <?php echo $x; ?> ;

        $('#Update_variable').click(function(){  
            //give a "Loading..." message
            $('div#test1 span').html('Loading...')
            //ask the server to echo "test_variable"
            //place "test_variable" in the span of #test1
                    $.get('server_response.php',
                    'test_variable=' + test_php_variable,
                    function(data){
                        $('div#test1 span').html(data);  
                    }, 'html'); //end $.get
        }); //end click  
    }); //end document ready
    </script>


</head>
<body>
   <?php $x=10; ?> <!-- it's as if the jQuery code is executing before this line of code -->
    <div id="test1">
        Some Text<br/>
        <span>replace_this_with_server_response</span>
        <br/>
        <input type="submit" id ="Update_variable" value="Update">
    </div> <!-- end test1 --> 
</body>    

server_response.php代码:

<?php
sleep(1);
echo 'test_variable = '.$_GET['test_variable'];
?>

3 个答案:

答案 0 :(得分:5)

您收到错误是因为脚本中的$x 未定义。 PHP从上到下处理页面。为了演示,此代码将引发错误:

<?php
echo $x;
$x = 10;
?>

...但此代码可以使用:

<?php
$x = 10;
echo $x;
?>

这与jQuery无关。您可以将javascript放在页面底部,或者至少在$x = 10;行之后解决此特定问题。

答案 1 :(得分:3)

所有php代码都在服务器端执行。所有javascript代码都在客户端执行。

所以,服务器正在阅读:

var test_php_variable = <?php echo $x; ?> ;
<?php $x = 10; ?>

并发送

var test_php_variable = undefined ;

到浏览器。

如果您将其更改为:

<?php $x = 10; ?>
var test_php_variable = <?php echo $x; ?> ;

服务器将发送

var test_php_variable = 10 ;

到浏览器。

尝试使用Charles

等工具查看服务器响应

答案 2 :(得分:2)

PHP在服务器上处理。它不依赖于JQuery(JQuery在浏览器中处理)。对于PHP解释器,代码如下所示:

blah blah
<?php echo $x; ?>
blah blah
<?php $x=10; ?>
blah blah

现在很明显,在定义其值之前,请先阅读$x