【问题标题】:CakePHP and Ajax request urlCakePHP 和 Ajax 请求网址
【发布时间】:2013-03-20 20:53:06
【问题描述】:

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

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

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

http://localhost/appname/controllername/methodname

请求的 url 将是

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 链接也将与根文件夹保持一致。

【问题讨论】:

  • 那么是什么阻止您实际使用完整的 URI 作为 url 值?

标签: php ajax cakephp


【解决方案1】:

试试这个

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

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

【讨论】:

  • 最好通过HtmlHelper::url() 生成URL,这样可以确保自定义路由也被考虑在内。即echo $this-&gt;Html-&gt;url(array('controller' =&gt; 'controllername', 'action' =&gt; 'actionname', 0 =&gt; $id), true);。第二个参数 (true) 确保生成完整的 URL (http://),但是如果您指向同一个域,则不需要
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    使用

    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)); ?>"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      相关资源
      最近更新 更多