我无法使用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'];
?>
答案 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
。