我应该通过API子域加载所有AJAX调用吗?

时间:2013-06-11 18:29:53

标签: ajax api .htaccess

通常访问我的网站会触发此htaccess规则:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php$1 [L]

所以http://example.com/test/1变为http://example.com/index.php/test/1

对于AJAX调用,我有这个:

RewriteCond %{HTTP_HOST} ^api\.example\.net
RewriteRule ^(.*)$ /api.php$1 [L]

因此,指向与域{,3}}相同的目录的虚拟hsot变为http://api.example.com/test/1

两者之间的区别在于index.php将与JSON一起返回,JSON是初始页面加载的基本html框架。虽然api只会返回JSON

我还有其他服务器可以通过http://example.com/api.php/test/1在网站上使用的REAL API调用。

有没有人看到这个问题?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

普通JSON的问题在于您无法执行跨域AJAX请求,包括子域。但是每个问题都是一个解决方案。有一种名为CORS的技术,这意味着您只需添加一个特殊标头即可允许跨域调用。

因此,如果您只想允许域example.com,标题应如下所示:

Access-Control-Allow-Origin: http://example.com

如果您想允许所有域的访问,请改为使用星号:

Access-Control-Allow-Origin: *

最后是PHP代码,你必须在任何其他输出之前放置这行php,否则你会收到警告并且ajax调用将失败:

header("Access-Control-Allow-Origin: http://example.com");