codeigniter - 表单的动作属性 - 如何在javascript中指定完整的应用程序路径

时间:2012-09-06 14:51:15

标签: javascript codeigniter

我的观点中有以下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 /”,而是将“controllerX / methodABC /”附加到当前URL的末尾。 所以如果用户在:

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

当点击按钮提交表单时,他们最终会:

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

有没有办法在javascript中获取site_url()或base_url? 有什么建议?感谢您阅读该帖子。

编辑:

根据某人的建议(我认为这是一个好主意)我创建了一个名为“global.js”的新.js文件,其中有一行:

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 =“重新分配Vlan”;         警报(submitFormHTML);

Edit2:

有趣的是,当我在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>

它运作得很好。

我看不出包含文件失败的原因。

2 个答案:

答案 0 :(得分:0)

实际上正确调用了该操作。与href属性类似,如果您在没有斜杠(/)的情况下启动它,它只会将值附加到当前页面的uri,这是您描述的行为。

您有两个选项可以从HTTP HOST的根目录引用此脚本:

使用斜杠启动action属性:

action="/controllerX/methodABC/"

或添加服务器的完整路径,包括协议:

action="http://myserver/mypp/controllerX/methodABC/"

答案 1 :(得分: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);