我正在阅读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
。如何??
答案 0 :(得分:1)
重要的是要了解Apache服务器无法根据脚本为Content-type标题返回的内容来确定URL。换句话说,Apache无法提前知道脚本将返回JSON数据。
也就是说,有几种方法可以让Apache做你想做的事。以下是我能想到的两个。
一个是告诉您的Apache服务器.json文件应该通过PHP解析器运行。这意味着你实际上将你的文件保存为test.json,当Apache去提供它时,它将像任何扩展名为.php的文件一样执行它。
我通常不喜欢这个解决方案,但在某些情况下它可能有意义。要实现这一点,请将以下内容添加到httpd.config文件中。
AddType application/x-httpd-php .json
另一种方法是使用重定向来提供test.php,就像它是test.json一样。 (换句话说,当用户去test.json时,你实际上执行了test.php)我个人更喜欢这种方法。但是,由于您希望找到的文件实际上并不存在,因此它可以更轻松地减少错误。对于熟悉Apache的大多数开发人员来说,这不是问题。
要使重定向工作,您可以在.htaccess文件中使用类似下面的内容。
RewriteEngine On
RewriteRule ^(.*)\.json$ $1.php [L]