0

我很抱歉这个不准确的标题,但我无法在没有显示一些代码的情况下描述我的问题。

我有一个动作 - edit_one - 在 routes.php 中定义如下:

Router::connect('/edit_one/:ad_id', array('controller' => 'ads', 'action' => 'edit_one'));

如您所见,它需要一个参数 - ad_id。

我在 edit_one 视图中有一个 jQuery-ajax 函数,如下所示:

$.ajax({
        url: "delete_from_facebook",
        type: "POST",
        data: data,
        success: function (res) {
            console.log(res);
       }
       });

url 'delete_from_facebook' 在 routes.php 中定义如下:

Router::connect('/delete_from_facebook', array('controller' => 'ads', 'action' => 'deleteFromFacebook')); 

Controller 中的 deleteFromFacebook 函数:

public function deleteFromFacebook() {
    $this->autorender = false;
    try {

        $this->log($this->request->data, 'debug');
        $response = $this->fb_handler->deletePhotoFromFacebook($this->fb, $this->request->data['id']);
        $this->log($response, 'debug');

        return new CakeResponse(array('body' => json_encode($response)));
    } catch (FacebookApiException $fbe) {
        $this->showFacebookAPIException($fbe);
    } catch (Exception $e) {
        $msg = __('An error has occured while uploading images. Please try again.');
        $this->showException($e, $msg);
    }
}

我的问题是,如果 url 是相对的,ajax 请求将始终发布到 edit_one 操作。如果提供的 url 是绝对的,它将发布到 deleteFromFacebook 函数。

我知道这其中的原因。这是因为 edit_one 操作需要一个参数。我已经尝试过了,然后 ajax-request 到了正确的位置。我正在使用视图中的相同 ajax 请求来制作广告,该广告在 routes.php 中定义,如下所示:

Router::connect('/add', array('controller' => 'ads', 'action' => 'add'));

从路由中可以看出,add.ctp 和 edit_one.ctp 在同一个文件夹中。相对路径应该同样适用于两者。

我必须有参数,我必须使用相对路径。我该怎么做才能让 ajax 请求发布到正确的位置?

4

1 回答 1

0

向哪个 url 发出 ajax 请求完全取决于您的 jquery 代码。它与 CakePHP 路由无关。停止在您的 jquery 代码中使用相对 url,您的问题就消失了。一种常见的明智方法是将应用程序的基本路径放在 js var 中,然后将该 var 附加到 js 代码中使用的所有 url 字符串中。例如。

//At the top of a js file load in all your pages or in all page <head>
var baseUrl = "/";  // OR "/subfolder/"

$.ajax({
        url: baseUrl + "delete_from_facebook",
        type: "POST",
        data: data,
        success: function (res) {
            console.log(res);
       }
});
于 2013-04-23T14:29:54.897 回答