0

私のビューには次のJavaScriptがあります。

  $.ajax({
    url:"<?php echo site_url('switches/showknownvlans/'.$ip.'/'.$hardwaremodel);?>",
    type:'POST',
    dataType:'json',
    success: function(returnDataFromController) {
    //alert(returnDataFromController.length);
    var htmlstring;
    var submitFormHTML;
    htmlstring = "some html stuff";

    for(i = 0; i < returnDataFromController.length; i++) {

    }
    submitFormHTML = "<form method='post' accept-charset='utf-8' action='controllerX/methodABC/"+ $('#ip').val() +"/" + $('#hardwaremodel').val() +"/" + $('#port').val() + "'><input type='text' id='newVlanID' style='width:5em;height:1.5em'/>&nbsp;&nbsp;<button type='submit' class='btn' id='saveVlan' style='width:10em;height:2em'>Reassign Vlan</button></form>";
    alert(submitFormHTML);
    $('#clientajaxcontainer').html(htmlstring);
    $('#newvlanform').html(submitFormHTML);

「submitFormHTML」文字列でフォームの「action」プロパティに現在定義しているパスが正しくありません。すべてのパラメーターを使用してユーザーを「http://myserver/myapp/controllerX/methodABC/」に移動する代わりに、現在の URL の末尾に「controllerX/methodABC/」を追加します。ユーザーが次の場所にいる場合:

 http://myserver/mypp/controller23/method123/

ボタンをクリックしてフォームを送信すると、次のようになります。

 http://myserver/mypp/controller23/method123/controllerX/methodABC/

javascript で site_url() または base_url を取得する方法はありますか? 助言がありますか?投稿を読んでいただきありがとうございます。

編集:

誰かの提案に従って (良い考えだと思います)、「global.js」という名前の新しい .js ファイルを作成しました。その中に次の 1 行があります。

var BASEPATH = "<?php echo base_url(); ?>";

このファイルは、次のようにビューのテンプレート PHP ファイルに含まれます。

<!DOCTYPE html> <!-- aka HTML5 -->
<html lang="en">
<head>
  <meta charset="utf-8">


<link href="<?php echo base_url();?>assets/css/bootstrap.css" rel="stylesheet">
    <script type='text/javascript' src='<?php echo base_url();?>assets/js/global.js' charset="utf-8"></script>

フォームを作成する JavaScript を次のように変更しました。アラート (submitFormHTML);

編集2:

興味深いのは、global.js で BASEPATH を定義すると、JavaScript が最終的に生成する URL が次のようになることです。

 http://myserver/myapp/index.php/switches/showportvlan/parm1/parm2/%3C?php%20echo%20base_url%28%29;?%3E/index.php/switches/changeportvlan/parm1/parm2/parm3. 

ご覧のとおり、「」を解釈する代わりに、テキストをそのまま含めただけです。

しかし、別のjsファイルを含めるのを忘れて、これを行うだけの場合:

<link href="<?php echo base_url();?>assets/css/bootstrap.css" rel="stylesheet">
    <script type='text/javascript'>
         var BASEPATH="<?php echo base_url();?>";
     </script>

それはうまく動作します。

インクルード ファイルが失敗する理由がわかりません。

4

2 に答える 2

0

アクションは実際には正しく呼び出されています。href属性と同様に、スラッシュ(/)なしで開始すると、現在のページのURIに値が追加されます。これは、説明する動作です。

HTTPHOSTのルートからこのスクリプトを参照するための2つのオプションがあります。

アクション属性をスラッシュで開始します。

action="/controllerX/methodABC/"

または、プロトコルを含むサーバーへのフルパスを追加します。

action="http://myserver/mypp/controllerX/methodABC/"
于 2012-09-06T15:16:29.837 に答える
0

新しい質問に合わせて更新された回答

header.php

<base href="<?php echo base_url(); ?>" />

<link href="assets/css/bootstrap.css" rel="stylesheet">

<script>
 //global vars, can be used in any external js file
 var BASEPATH = "<?php echo base_url(); ?>";
 var IP       = "<?php echo $_SERVER['REMOTE_ADDR']";
</script>

<script src="assets/js/global.js"></script>

global.js

(function($){

   var formsObject = {
       init : function(){
           if($("form#id1"))
           {
              this.formOne; //run form one if id is present
           }
       },
       formOne : function(){
           var fOne = $("form#id1");

           fOne.submit(function(){
               var data = {
                  '' : '',
               }

               do_ajax(data);
           });

           var do_ajax = function(data){
                $.ajax({
                     url : BASEPATH + fOne.attr('action'),
                     //and so on
                });
           }
       }
   }

   //ready
   $(function(){
       formsObject.init();
   });

})(jQuery);
于 2012-09-06T15:55:56.670 に答える