我很抱歉这个标题,但我在描述我的问题时遇到了问题,而不显示一些代码。
我有一个动作- 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')); 控制器中的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-request将总是post到edit_one操作。如果提供的url是绝对的,它将post到deleteFromFacebook函数。
我知道这样做的原因。这是因为edit_one操作需要一个参数。我在没有尝试的情况下尝试过,然后ajax-request到达了正确的位置。我在视图中使用相同的ajax-request来制作一个广告,它在routes.php中定义如下:
Router::connect('/add', array('controller' => 'ads', 'action' => 'add'));正如您从路由中看到的,add.ctp和edit_one.ctp位于同一文件夹中。相对路径在这两种情况下都应该工作得很好。
我必须有参数,并且我必须使用相对路径。如何才能将ajax请求发送到正确的位置?
发布于 2013-04-23 22:29:55
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);
}
});https://stackoverflow.com/questions/16171445
复制相似问题