表单's的action属性-如何在javascript中指定完整的应用程序路径

form's action property - how to specify full app path in javascript

本文关键字:javascript 路径 应用程序 action 表单 属性      更新时间:2023-09-26

我的视图中有以下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";alert(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>

它工作得很好。

我不明白include文件失败的原因。

更新答案以匹配您的新问题

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);

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

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

以斜线开始操作属性:

action="/controllerX/methodABC/"

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

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