如果Content-Type被更改,php文件应该具有什么文件扩展名?

时间:2017-03-02 20:49:24

标签: php jquery json ajax http-headers

我正在阅读www.runningcoder.org中的jQuery Typeahead文档,并查看v1_user example我正在从表单下方的标签中学习源代码。

很明显,PHP标签中的 我们可以看到所有'数据'的内容然后改变(IOW发送)header('Content-Type: application/json');和输出echo json_encode(array(...));(“一切似乎是PHP代码“)。

现在,请转到浏览器中的 Javascript标签搜索字符串 CTRL + F 在大多数浏览器中):url: "/jquerytypeahead/user_v1.json"url属性是来自API的jQuery Ajax选项(我想我们都知道它是什么)。事情是指的是json文件,为什么?我们在返回 json内容文件之前看到的不是那个PHP文件吗?

我可以转到http://www.runningcoder.org/jquerytypeahead/user_v1.json?q=ar

来证明这一点

www.runningcoder.org/jquerytypeahead/user_v1 .json ?q=ar(请注意json文件扩展名)

本地测试:我有一些代码返回application/json(与v1_user示例相同) 将其命名为test.php。访问此脚本时,我无法引用localhost/typeahead/test.json?q=something,但我可以localhost/typeahead/test.php?q=something。如何??

1 个答案:

答案 0 :(得分:1)

重要的是要了解Apache服务器无法根据脚本为Content-type标题返回的内容来确定URL。换句话说,Apache无法提前知道脚本将返回JSON数据。

也就是说,有几种方法可以让Apache做你想做的事。以下是我能想到的两个。

方法#1

一个是告诉您的Apache服务器.json文件应该通过PHP解析器运行。这意味着你实际上将你的文件保存为test.json,当Apache去提供它时,它将像任何扩展名为.php的文件一样执行它。

我通常不喜欢这个解决方案,但在某些情况下它可能有意义。要实现这一点,请将以下内容添加到httpd.config文件中。

AddType application/x-httpd-php .json

方法#2

另一种方法是使用重定向来提供test.php,就像它是test.json一样。 (换句话说,当用户去test.json时,你实际上执行了test.php)我个人更喜欢这种方法。但是,由于您希望找到的文件实际上并不存在,因此它可以更轻松地减少错误。对于熟悉Apache的大多数开发人员来说,这不是问题。

要使重定向工作,您可以在.htaccess文件中使用类似下面的内容。

RewriteEngine On
RewriteRule ^(.*)\.json$ $1.php [L]