Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Codeigniter中的Ajax请求_Javascript_Php_Jquery_Ajax_Codeigniter - Fatal编程技术网

Javascript Codeigniter中的Ajax请求

Javascript Codeigniter中的Ajax请求,javascript,php,jquery,ajax,codeigniter,Javascript,Php,Jquery,Ajax,Codeigniter,我一直在尝试在codeigniter中创建一个ajax请求。我看到了这个问题:但我无法理解这一点,因为有一些答案是人们在Javascript中使用PHP。我不知道这是可能的,但是我尝试了一下,但似乎PHP没有被执行 下面是我的问题: 是否真的可以在Javascript中使用PHP,还是我弄错了 在Codeigniter中执行Ajax请求的正确方法是什么?我尝试了以下几点: var param={name:event\u name,date:event\u date,time:event\u ti

我一直在尝试在codeigniter中创建一个ajax请求。我看到了这个问题:但我无法理解这一点,因为有一些答案是人们在Javascript中使用PHP。我不知道这是可能的,但是我尝试了一下,但似乎PHP没有被执行

下面是我的问题:


  • 是否真的可以在Javascript中使用PHP,还是我弄错了
  • 在Codeigniter中执行Ajax请求的正确方法是什么?我尝试了以下几点:
  • var param={name:event\u name,date:event\u date,time:event\u time}

                $.ajax({
                    // As seen from the question here at stackoverflow.
                    url : "<?php echo base_url('event/new_event'); ?>",
                    type : 'POST',
                    data : param,
                    beforeSend : function(){ },
                    success : function(){
                        alert("Event created! Feel free to add as much details as you want.");
                        namebox.val("");
                        $("#new-event-modal").find(".close").trigger('click');
                        window.location.href = "<php echo base_url('user/dashboard'); ?>";
                    },
                    complete : function(){ },
                    error : function(){ }
                });
    
    $.ajax({
    //从stackoverflow的问题中可以看出。
    url:“”,
    键入:“POST”,
    数据:param,
    beforeSend:function(){},
    成功:函数(){
    警报(“事件已创建!请随意添加所需的详细信息。”);
    namebox.val(“”);
    $(“#新事件模式”).find(“.close”).trigger('click');
    window.location.href=“”;
    },
    完成:函数(){},
    错误:函数(){}
    });
    

    我知道我可以在请求中硬编码
    URL
    ,但这不是一个好的做法

    实现这一点的最简单方法是使用一些jquery:

    function getBaseUrl() {
        var l = window.location;
        var base_url = l.protocol + "//" + l.host + "/" + l.pathname.split('/')[1];
        return base_url;
    }
    
    var postdata = {name : event_name, date : event_date, time : event_time};
    var url = getBaseUrl()+"/event/new_event";
    
    $.post(url, postdata, function(result){
      ...alert(result);
    });
    
    或者通过缓存直接从JS调用它:

    <script> 
    
        var test = "<?php echo base_url(); ?>"+"event/new_event";
        alert(test);
    
    </script>
    
    
    var test=“”+“事件/新事件”;
    警报(测试);
    
    下面是我将要使用的一个肮脏的黑客

  • 在页面上的某个地方创建一个隐藏字段,当该页面加载时,
    base\u url()作为该隐藏字段的值回显
    
  • 现在,当您想要发出ajax请求时,访问该隐藏字段 然后抓取
    基本url
    ,随心所欲地使用它

  • 正确的方法总是最简单的方法,如果您还没有使用Jquery,就不需要在客户端中导入它

    这是您的控制器

    <?php if (!defined('BASEPATH')) die();
    class Example_ctrl extends CI_Controller {
    
        public function ajax_echo()
        {
            // get the ajax input
            $input = json_decode(file_get_contents('php://input'));
    
            // $input can be accessed like an object
            $password = $input->password;
            $name = $input->name;
    
            // you can encode data back to JSON
            $output = json_encode($input);
    
            // and the response goes back!
            echo($output);
        }
    }
    ?>
    
    <script>
        // here's the data you will send
        var my_data = {name: "Smith", password: "abc123"};
    
        // create the request object
        var xhr = new XMLHttpRequest();
    
        // open the object to the required url
        xhr.open("POST", "example_ctrl/ajax_echo", true);
    
        // on success, alert the response
        xhr.onreadystatechange = function () {
            if (xhr.readyState != 4 || xhr.status != 200)
                return;
            alert("Success: " + xhr.responseText);
            };
    
        // encode in JSON and send the string 
        xhr.send(JSON.stringify(my_data));
    </script>
    
    
    
    这会进入您的客户

    <?php if (!defined('BASEPATH')) die();
    class Example_ctrl extends CI_Controller {
    
        public function ajax_echo()
        {
            // get the ajax input
            $input = json_decode(file_get_contents('php://input'));
    
            // $input can be accessed like an object
            $password = $input->password;
            $name = $input->name;
    
            // you can encode data back to JSON
            $output = json_encode($input);
    
            // and the response goes back!
            echo($output);
        }
    }
    ?>
    
    <script>
        // here's the data you will send
        var my_data = {name: "Smith", password: "abc123"};
    
        // create the request object
        var xhr = new XMLHttpRequest();
    
        // open the object to the required url
        xhr.open("POST", "example_ctrl/ajax_echo", true);
    
        // on success, alert the response
        xhr.onreadystatechange = function () {
            if (xhr.readyState != 4 || xhr.status != 200)
                return;
            alert("Success: " + xhr.responseText);
            };
    
        // encode in JSON and send the string 
        xhr.send(JSON.stringify(my_data));
    </script>
    
    
    //这是你将要发送的数据
    var my_data={name:“Smith”,密码:“abc123”};
    //创建请求对象
    var xhr=new XMLHttpRequest();
    //将对象打开到所需的url
    open(“POST”,“example\u ctrl/ajax\u echo”,true);
    //成功后,提醒响应
    xhr.onreadystatechange=函数(){
    如果(xhr.readyState!=4 | | xhr.status!=200)
    返回;
    警报(“成功:+xhr.responseText”);
    };
    //用JSON编码并发送字符串
    send(JSON.stringify(my_data));
    
    没有比这更好的方法了。 无法从外部javascript文件执行Php代码

    请尝试以下任何一种:

    1) base_url()是不会更改的内容,最好将其存储在cookie中,然后在服务器端代码和客户端代码中访问它

    2) 您可以在本地存储中存储相同的base_url(),它将在外部JavaScript文件中可用


    希望它能帮助您:)

    您有一次机会在JavaScript中使用PHP,也就是在运行时,您可以在页面加载时编写脚本,除此之外,AJAX是与后端进行动态通信的方式。没关系。但我不认为它(PHP在JS中)在外部JS文件的情况下工作!会吗?在加载JS文件之前,在视图中创建一个JS变量。您可以在那里使用base_url()函数。保持简单是不是真的可以在Javascript中使用PHP,还是我弄错了?是的,当它不是外部文件时,您可以使用它。但当它是外部的时,您可以将url分配给一些隐藏的输入,然后使用输入id将其值传递给url。在Codeigniter中执行Ajax请求的正确方法是什么?这取决于你的要求。但请记住,如果您的CSRF已打开,则您不能使用post方法,除非您将数据传递给CSRF令牌。我感谢您的回答,但这就是如何获取
    base\u url()
    的问题所在。这是一个PHP函数…啊,好的。。让我帮你弄到,等一下,谢谢,但如果你熟悉Codeigniter,
    基本url
    是我在配置文件中设置的,而不是来自地址栏。我理解,但php只能处理这个,而不是你的JS。为了让JS处理这个问题,您需要像注释一样提供JS函数,base_url是一个需要加载的codeigniter函数:$this->load->helper('url');如果您想在JS中使用基本url,请将其包含在标题中:
    base_url=”“当然会。。但必须有一个更好的解决方案,您应该能够以这种方式使用它:var test=“”+“event/new_event”;请注意:正如您在示例中看到的,如果视图和控制器位于同一个域中,则无需在任何位置包含base_url。您可以在客户端中使用相对地址,如图所示。