首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cakephp: Ajax-request转到指定另一个url时调用的操作

Cakephp: Ajax-request转到指定另一个url时调用的操作
EN

Stack Overflow用户
提问于 2013-04-23 22:04:00
回答 1查看 875关注 0票数 0

我很抱歉这个标题,但我在描述我的问题时遇到了问题,而不显示一些代码。

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

代码语言:javascript
复制
Router::connect('/edit_one/:ad_id', array('controller' => 'ads', 'action' => 'edit_one'));

正如您所看到的,它接受一个参数- ad_id。

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

代码语言:javascript
复制
$.ajax({
        url: "delete_from_facebook",
        type: "POST",
        data: data,
        success: function (res) {
            console.log(res);
       }
       });

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

代码语言:javascript
复制
Router::connect('/delete_from_facebook', array('controller' => 'ads', 'action' => 'deleteFromFacebook')); 

控制器中的deleteFromFacebook函数:

代码语言:javascript
复制
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中定义如下:

代码语言:javascript
复制
Router::connect('/add', array('controller' => 'ads', 'action' => 'add'));

正如您从路由中看到的,add.ctp和edit_one.ctp位于同一文件夹中。相对路径在这两种情况下都应该工作得很好。

我必须有参数,并且我必须使用相对路径。如何才能将ajax请求发送到正确的位置?

EN

回答 1

Stack Overflow用户

发布于 2013-04-23 22:29:55

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

代码语言:javascript
复制
//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);
       }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16171445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档