我很抱歉这个不同意的标题,但我在没有显示某些代码的情况下无法描述我的问题。
我有一个动作 - 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);
}
});
网址'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);
}
}
我的问题是,如果网址是相对的,则ajax-request将始终发布到edit_one操作。如果提供的URL是绝对的,它将发布到deleteFromFacebook函数。
我知道这个的原因。这是因为edit_one动作需要一个参数。我没试过,然后ajax请求到了正确的地方。我在视图中使用相同的ajax-request来制作广告,该广告在routes.php中定义如下:
Router::connect('/add', array('controller' => 'ads', 'action' => 'add'));
从路径中可以看出,add.ctp和edit_one.ctp位于同一个文件夹中。相对路径应该同样适用于两者。
我必须有参数,我必须使用相对路径。我该怎么做才能让ajax-request发布到正确的位置?
答案 0 :(得分:0)
ajax请求的url完全取决于你的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);
}
});