如果我用Jquery .load(file. PHP)加载一个PHP页面,包含的文件可以使用在调用load()的页面上定义的PHP变量吗?
不,你必须把你想要使用的变量传递给你的file.php
:
$('#yourdiv').load('file.php?var1=xyz&var2=xyz&var3=xyz');
可以在file。php:
中获取$var1 = $_GET['var1'];
$var2 = $_GET['var2'];
$var3 = $_GET['var3'];
如果有很多变量,那么使用POST方法:
$('#yourdiv').load('file.php', {var1:x, var2:y, var3:z})
然后在file.php:
中获取变量$var1 = $_POST['var1'];
$var2 = $_POST['var2'];
$var3 = $_POST['var3'];
你误解了事情的运作方式。
- PHP在任何浏览器响应发出给客户端之前运行,所有代码都在服务器上运行。在PHP文件中声明的变量将在所有PHP代码运行后销毁;他们"消失。"
- JavaScript在浏览器响应开始后运行,所有代码都在客户端上运行。通过"加载"PHP文件的输出结果,您将无法访问PHP的变量,只能访问输出。
如果您想要将某些变量从PHP传输到JavaScript,您可以在PHP脚本中将一些输出转储为JSON,如下所示:
<?PHP
header("Content-Type: application/json");
$myVariable = "hello world";
echo json_encode(array(array("myVariable" => $myVariable)));
/* Output looks like this:
[
{
"myVariable": "hello world"
}
]
*/
?>
你的JavaScript/JSON应该看起来像这样:
$.getJSON("test.php", function(result) {
console.log(result[0].myVariable);
});
明白了吗?
是,使用data参数,参见http://api.jquery.com/load/:
$('#someelement').load(
"test.php",
{
'key1': '<?php echo $value1; ?>',
'key2': '<?php echo $value2; ?>'
}
);
这些参数被发送到文件test.php
中,可以通过以下方式访问:
$_POST['key1']
$_POST['key2']
您必须通过.load函数将这些变量传递给加载的PHP文件。
的例子:
$("#objectID").load("test.php", { 'choices[]': ["{$choice1}", "{$choice2}"] } );
当前PHP文件中定义的变量将成为加载新PHP文件的Javascript的一部分。
JavaScript
加载的PHP
脚本中的变量作用域与加载PHP
脚本的页面不同,因此答案为no
,但你可以定义全局变量或使用超全局变量,如($_GET
, $_POST
等)来获得你想要的
JQuery加载函数的第二个参数(params)应该是一个对象或回调函数,但也可以是一个空字符串。这取决于load发送post或get请求。
我有一个想法,在get和post之间自动切换,(例如,如果cookie设置),因为get更快,更容易缓存,而post更节省。
将包含回调函数内部内容的加载函数写两次比写这样的东西更糟糕:
//get
var url="cache_dir/my_bag.html";
var params="";
if(document.cookie){
//post
url="post.php";
params="{my:bag}";
}
$(selector).load(url,params,function(){
...
});