我很抱歉这个不准确的标题,但我无法在没有显示一些代码的情况下描述我的问题。
我有一个动作 - 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 请求发布到正确的位置?