在cakePHP中调用ajax时使用action url的最佳实践

RSK*_*RSK 5 ajax jquery cakephp url-rewriting

我在cakePHP应用程序中使用ajax和jQuery.
我的javascript函数放在一个javascript文件中.

现在在我的本地系统中,文件保存在"/ sample"目录中,因此我调用该函数时的路径将是

在ajax.js

$.post({url : "/sample/controller/action"})
Run Code Online (Sandbox Code Playgroud)

但托管后,网址将成为

$.post({url : "/mydomain.com/controller/action"})
Run Code Online (Sandbox Code Playgroud)

在cakePHP中我们$html->url生成url
但由于此代码在js文件中,我无法使用该函数

我不想在托管之前手动更改所有ajax操作URL

Pau*_*nis 23

您可以在您的蛋糕应用程序的主模板中创建一个可在整个应用程序中使用的全局 javascript变量.确保它存在,因为你也做任何JS包括.

<head>
    ...
    <script type="text/javascript">var myBaseUrl = '<?php echo $html->url; ?>';</script>
    ...
    <script type="text/javascript" src="mycustomJSfile.js">
    ...
</head>
Run Code Online (Sandbox Code Playgroud)

现在,您可以从MVC框架应用程序中的任何视图文件中执行此类操作.

$.post({url: myBaseUrl + 'controller/action'});
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案,但它对我不起作用.这可能是因为我正在使用Cake 2,而这个解决方案是针对早期版本的.尽管如此,我必须使用它来使它在Cake2中工作的代码是`<script type ="text/javascript"> var myBaseUrl ='<?php echo $ this-> Html-> url('/'); ?>'; </ SCRIPT>` (5认同)

lin*_*ndy 6

我正在更新Paul Dragoonis的答案以反映最新的CakePHP版本(2.2).

在您的布局文件中,使用CakePHP的JSHelper:设置JavaScript变量<?php echo $this->Js->set('url', $this->request->base); ?>,其中$this->request是CakeRequest的实例,并提供有关当前请求的信息.

在上面的行之后,用缓冲区写<?php echo $this->Js->writeBuffer(); ?>.

然后,您可以使用JavaScript访问此变量app.url.