var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("POST","test.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("abc=123");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
<?php if(isset($_POST['abc'])) {
$test123 = 'worked';
}
?>
}}
var worked = '<?php echo $test123;?>'; // <--- this is not working
我该如何使这项工作?无论是使用get还是post方法,我都不会在PHP中收到变量。
答案 0 :(得分:7)
你似乎有两个基本的误解。一个是关于AJAX,另一个是关于客户端与服务器端代码。后者更重要。
基本上PHP和JavaScript彼此完全不可知。它们并不是并行运行的。在这种情况下,它们甚至不在同一台机器上运行(PHP代码在您的服务器上运行,用户计算机上的JavaScript运行)。每个脚本可以与另一个脚本进行的唯一通信是通过HTTP。
需要拥有代码的test.php
<?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
?>
只要test.php
存在,这应该可行,但我认为它是一个独立的脚本。
由于AJAX的异步性及其HTTP依赖性,当 ajax请求完成时,你不能依赖,如果它将完成。也就是说,任何依赖于AJAX调用结果的代码必须在ajax响应回调中完成。
也就是说,你会做这样的事情:
//php
<?php if (isset($_POST['abc']) { echo json_encode(array('success' => true)); }
//JavaScript
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
if (JSON.parse(xmlhttp.responseText).success) {
console.log('it worked!');
}
}
答案 1 :(得分:1)
除了@Explosion Pills解释这意味着ajax中的php无法按预期工作。
在test.php里面的地方放了这个:
<?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
echo $test123;
?>
然后在你的代码中替换它:
<?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
?>
by:
var worked = xmlHttp.responseText;
最后删除最后一行:
var worked = '<?php echo $test123;?>';
并查看会发生什么。