AJAX向PHP发送变量无法正常工作

时间:2013-05-21 18:53:37

标签: php javascript ajax

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中收到变量。

2 个答案:

答案 0 :(得分: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!');
    }
}

答案 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;?>';

并查看会发生什么。