如何用PHP从AJAX请求返回信息


How to return information with PHP from an AJAX request?

我一直在学习AJAX,并从本地服务器发出第一个请求,只请求XML或HTML文件,没有什么太难的。我现在正在使用PHP,我对它相当了解,它与使用XML/HTML没有太大的不同。

在阅读教程时,我看到了几种将信息返回给JavaScript的不同方法;我很好奇是否有一种"正确"的方式,甚至是一种"更正确"的方式。到目前为止,我遇到了三种方法:

someFile.php:

<?php
$foo = $_GET['bar'];
// manipulate $foo
exit($foo); // method 1
echo $foo;  // method 2
// method 3:
?>
<div id='baz'>
    <p>
        Some output to be returned to JavaScript as the 'responseText'
        property of the AJAX request.
    </p>
    <p>
        <?php echo $foo ?>
    </p>
</div>

我只是不确定将信息从服务器返回到浏览器的过程。什么都被退回去了?如果这是一个人们应该访问的页面,会显示什么?谢谢你的帮助!

您需要将PHP脚本视为生成浏览器请求的HTML/JSON/XML文档的程序。在AJAX中,浏览器也做同样的事情:它请求文档的某个URL。它可能只是一个片段或JSON,您将使用JavaScript将其集成到页面中。

对于AJAX来说,这两种方法都不正确,尽管到目前为止我还没有看到"退出(…)"方法。任何生成文档的东西都可以工作。

关于最佳实践,您可能最终希望将您的计算与文档的生成分开。但我猜你应该首先获得更多基本的PHP、HTML、AJAX等方面的经验。当您编写的应用程序变得如此之大,以至于您开始难以找到您的代码时,您可能想要查看PHP的MVC框架,它解决了分离计算(业务/模型逻辑)和文档生成(视图)的问题。我听说Symfony很受欢迎。

我通常有多个值要从服务器发回,所以我使用:

<?php echo json_encode(array('name' => 'Michael', 'email' => 'michael@example.com'); ?>

然后我可以像访问对象一样轻松地访问它们。

alert(response.name);

尝试使用JS库,如jQuery。

我总是这样做

<?php
header('Content-type: text/plain; charset=utf-8');
echo $foo;
exit;
?>

(是的,我知道在这个例子中我不需要使用exit)

如果您想让人们直接访问页面,那么上面的代码可以正常工作。但是,如果你想保护页面只是放在页面的顶部如果(_POST['somevalue'] == 'login')和从$ajax发送数据在POST。其余部分是相同的,如果你知道,例如在jQuery ajax onSuccess $(div).html(数据)!!