2

我正在使用 cakephp 并希望使用jQuery.ajax发布到我的服务器。问题是 jQuery$.ajax附加了协议和主机名,但还包括当前控制器,所以我也无法更改我正在粘贴的控制器。

有没有办法改变 url: 中的参数$.ajax?这是我的示例帖子代码:

 $.ajax({
        url: 'controller/action',
        type: 'post',
        data: $('#form_data').serialize(),
        dataType: 'json',
        success: function(json) {
            console.log(json);
        }
    });
4

4 回答 4

1

只需将您要发布到的确切/更具体的 URL 放在$.post设置的 URL 部分...

$.ajax({
    url: 'http://host/controller/action',
    type: 'post',
    data: $('#form_data').serialize(),
    dataType: 'json',
    success: function(json) {
        console.log(json);
    }
});
于 2012-08-31T08:31:50.520 回答
1

试试这个

$.ajax({
    url: '/controller/action',
    type: 'post',
    data: $('#form_data').serialize(),
    dataType: 'json',
    success: function(json) {
        console.log(json);
    }
});

你看出区别了吗?如果您在 URL 前面加上“/”(斜杠),它将附加到您的域名,如果没有,它将附加到您当前的 URL。

于 2012-08-31T09:22:15.270 回答
1

创建一个文件,假设 'site_constants.php' 在 app/Config 文件夹中包含一些常量变量。在其中定义以下常量:

<?php    
define('HTTP_HOST', "http://" . $_SERVER['HTTP_HOST'].'/');
if(HTTP_HOST == 'localhost' || HTTP_HOST == '127.0.0.1')
{
     define('SITE_URL', HTTP_HOST.'app_folder_name/');
}
else
{
     define('SITE_URL', HTTP_HOST);
}

将其包含在app/Config/bootstrap.php

require_once('site_constants.php');

在主布局文件中定义 JS 变量常量:

<script type="text/javascript">
var SITE_URL = '<?php echo SITE_URL?>';
</script>

现在您可以在网站的任何地方使用它。而且这也是动态的,不需要在每一个ajax方法中都改变url。

 $.ajax({
    url: SITE_URL+'controller/action',
    type: 'post',
    data: $('#form_data').serialize(),
    dataType: 'json',
    success: function(json) {
        console.log(json);
    }
});

处理此任务可能看起来很漫长,但一旦完成,它将在许多方面为您提供帮助。

以下是优点:

  1. 您可以轻松定义更多常量(如任何文件路径等)。
  2. 您可以将所有 ajax 代码放入外部 JS 文件中。
  3. you can directly deploy it onto any server without changing in constants as well as work perfectly onto your localhost.
  4. following standard conventions etc.
于 2012-08-31T09:26:07.607 回答
0

在 cakePHP 中,你可以这样做:

$.ajax({
        url: '<?php echo $this->webroot; ?>controller/action',
        type: 'post',
        data: $('#form_data').serialize(),
        dataType: 'json',
        success: function(json) {
            console.log(json);
        }
    });

如果您的 ajax 代码在 js 文件中,那么您可以这样做:在您的layouts/default.ctp文件中:

<script type="text/javascript">
var webroot = "<?php echo $this->webroot; ?>";
</script>

然后在包含 ajax 的 js 文件中,您可以使用 js 变量webroot

$.ajax({
      url: webroot + 'controller/action',
      type: 'post',
      data: $('#form_data').serialize(),
      dataType: 'json',
      success: function(json) {
          console.log(json);
      }
});

你的意思是这样的吗

于 2012-08-31T08:34:54.323 回答