1
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 中的变量。

4

2 回答 2

7

你似乎有两个基本的误解。一个是关于 AJAX 的,另一个是关于客户端与服务器端代码的。后者更为重要。

服务器与客户端

本质上,PHP 和 JavaScript 彼此完全不可知。它们不并行运行。在这种情况下,它们甚至不在同一台机器上运行(PHP 代码在您的服务器上运行,JavaScript 在用户计算机上运行)。每个脚本可以与另一个进行的唯一通信是通过 HTTP。

test.php需要有代码

<?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
?>

只要test.php存在,这应该可以工作,但我认为它是一个独立的脚本。

使用 AJAX

由于 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!');
    }
}
于 2013-05-21T18:58:47.707 回答
1

除了@Explosion Pills 解释的内容之外,这意味着 ajax 中的 php 无法按预期工作。

在 test.php 里面的地方放这个:

<?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
echo $test123;
?>

然后在上面的代码中替换它:

 <?php if(isset($_POST['abc']))
{
$test123 = 'worked';
}
?>

经过:

 var worked = xmlHttp.responseText;

最后删除最后一行:

 var worked = '<?php echo $test123;?>';

看看会发生什么。

于 2013-05-21T19:04:45.583 回答