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

$.postセットアップの URL セクションに、投稿したい正確な/より具体的な 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

app/Config フォルダーにいくつかの定数変数を含む「site_constants.php」を想定して、ファイルを作成します。次の定数を定義します。

<?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>

これで、Web サイトのどこでも使用できます。これも動的です。すべての 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. 定数を変更せずに任意のサーバーに直接デプロイでき、ローカルホストで完全に動作します。
  4. 次の標準的な規則など。
于 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 に答える