1

我目前在我的应用程序的多个控制器中使用 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

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

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

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

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

我怎样才能使它根据我当前所在的控制器自动生成请求 url?

请注意,url 路径中的appname是应用程序根文件夹的名称,它也应该包含在内,这样如果文件将被传输到不同的服务器/位置,javascript 链接也将与根文件夹保持一致.

4

3 回答 3

1

试试这个

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

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

于 2013-03-21T13:24:36.457 回答
0

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

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

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

它在类似情况下对我有用。

于 2013-03-21T09:39:31.730 回答
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)); ?>"})
于 2016-07-23T08:32:39.750 回答