处理 ajax 调用中 url 的更好方法是什么,这些调用是在 webroot 中存在的 JavaScript 文件中进行的,因此,PHP 不会解释这些 url?
我正在使用 CakePHP 并要求.js因此不会将 javascript 代码直接放在视图中。我发现的唯一方法是在布局中声明一个变量,该变量接收 webroot 的值,如下所示:
<script>var webroot = "<?php echo this->Html->url('/') ?>" </script>
然后在我的js文件中,我将URL硬编码到ajax调用,如下所示:
$.getJSON(webroot + 'users/list', function(){ ... } );
但是,如果路由文件中存在更改,则无法解决问题。我通常会在完成项目后更改路由以使其更加友好,如果我在 js 文件中引用了许多 ajax 调用或 url,这将导致一个大问题。
我通常这样工作:
在我的布局标题中,我在包含任何其他 javascript 之前添加以下内容:
<script type="text/javascript">var baseUrl = '<?php echo $this->base; ?>';</script>
然后在我的javascript文件中,我这样做:
$.post("http://"+ document.domain + baseUrl +"/controller/action.json");
使用
echo Router::url(array('controller' => 'Users', 'action' => 'list'));
将输出;
/Users/list
在 js 中
$.post({url : "<?php echo Router::url(array('controller' => 'Users', 'action' => 'list')); ?>"})
如果你想以JSON格式显示应用程序的数据,我认为你正在反对CakePHP的约定。查看 CakePHP 说明书中关于 JSON 和 XML 视图的条目。