CakePHP和Ajax请求url

时间:2013-03-20 20:53:07

标签: php ajax cakephp

我目前在我的应用程序中使用多个控制器中的ajax。我使用jQuery支持的版本实现了ajax功能。

$.ajax({
    url:'getCountries',
    type: "POST",
    dataType: "html",
    data:"data=" + result,
    success: function(data){
                    //magic...
        }
    }
});

从上面的代码中可以看出,此请求的url是'getCountries'。 这意味着如果请求来自

http://localhost/appname/controllername/methodname

请求网址将是

http://localhost/appname/controllername/getCountries

但是,如果您使用此脚本的网址与上面的示例不同,请说

http://localhost/appname/controllername/methodname/7

(就像在编辑视图中一样),那些来自这些网址的ajax调用中的请求网址将更改为

http://localhost/appname/controllername/methodname/getCountries

如何根据我目前使用的控制器自动生成请求网址?

请注意,网址路径中的 appname 是应用程序根文件夹的名称,也应该包含它,以便在将文件传输到其他服务器/位置时javascript链接也会与根文件夹保持一致。

3 个答案:

答案 0 :(得分:1)

试试这个

 $.ajax({
url:"<?php echo $this->webroot . $this->params["controller"]; ?>/yourAction"
});

$this->webroot包含您的webroot的路径 例如,如果您的app文件夹位于htdocs / test中 并且您使用localhost/test/ $this->webroot对其进行访问将包含以下字符串'/test/'

答案 1 :(得分:0)

我认为你应该在Ajax调用中使用完整路径,如果你在多个视图中使用这个代码,你可以在一些变量中传递ControllerName:

$.ajax({
       url: http://localhost/appname/<?php echo $controllerName; ?>/getCountries
       // code
});

在这种情况下,您需要使用View或Element文件(扩展名为* .ctp)将变量回显到JavaScript代码。或者,您可以将其回显到视图中的某个JavaScript变量,并将其传递给外部* .js脚本文件。

在类似情况下,它适用于我。

答案 2 :(得分:0)

使用

echo Router::url(array('controller' => 'controllername', 'action' => 'methodname',7));

将输出;

/controllername/methodname/7

在js

$.post({url : "<?php echo Router::url(array('controller' => 'controllername', 'action' => 'methodname',7)); ?>"})