0

我一直在尝试在 codeigniter 中创建一个 ajax 请求。我已经看到了这个问题:Simple Ajax/Codeigniter request,但我无法吸收它,因为人们在 Javascript 中使用 PHP的答案。我不知道这是可能的,但是我试了一下,但似乎 PHP 没有被执行。

所以这是我的问题:

  1. 真的可以在 Javascript 中使用 PHP,还是我弄错了?
  2. 在 Codeigniter 中执行 Ajax 请求的正确方法是什么?我尝试过的是以下内容:

var param = {name : event_name, date : event_date, time : event_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(){ }
            });

我知道我可以URL在请求中硬编码,但这不是一个好习惯!

4

4 回答 4

1

完成此任务的最简单方法是使用一些 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>
于 2013-10-15T18:17:54.550 回答
0

这是我将要使用的肮脏技巧

  1. 在页面的某处创建一个隐藏字段,并在加载此页面时将其作为该隐藏字段的值回显base_url()
  2. 现在,当您要发出 ajax 请求时,请访问该隐藏字段并获取base url并使用它。
于 2013-10-15T18:31:38.767 回答
0

正确的方法总是最简单的方法,如果您还没有使用它,则无需在客户端中导入 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>
于 2013-10-15T18:45:10.543 回答
0

没有更好的方法来做到这一点。

无法从外部 javascript 文件执行 PHP 代码。

尝试以下任何一种:-

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

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

希望它可以帮助你:)

于 2013-10-16T05:08:49.467 回答