Javascript Codeigniter中的Ajax请求
我一直在尝试在codeigniter中创建一个ajax请求。我看到了这个问题:但我无法理解这一点,因为有一些答案是人们在Javascript中使用PHP。我不知道这是可能的,但是我尝试了一下,但似乎PHP没有被执行 下面是我的问题: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
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。您可以在客户端中使用相对地址,如图所示。