[英]AJAX request through angular js POST to a PHP script returning whole html page not redirecting
[英]ajax request in codeigniter returning html code instead of redirecting
我在 class 中添加了一个构造函数来检查是否有用户登录。
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('encryption');
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
redirect('account/login');
}
}
这是 ajax
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart"); ?>',
dataType: 'text',
data:{'id':val},
success:function(data) {
if (data != 'added') {
alert('Opps! something went wrong, please try again');
}
}
});
但是如果我尝试在没有 session 的情况下调用此请求,它不会重定向到登录页面,而是提供我可以在网络选项卡中看到的整个登录页面代码
据我所知,Ajax 只是返回一个响应文本。 它不会处理请求
您可以尝试以下操作
AJAX
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart"); ?>',
dataType: 'text',
data:{'id':val, 'type':'ajax'}, //say this request coming from a ajax
success:function(data) {
if (data != 'added') {
if(data == "not_log_in"){ //checking whether login or not
window.location = "login_page";
}else{
alert('Opps! something went wrong, please try again');
}
}
}
});
Controller
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
if(isset($_POST["type"])){ // checking whether request coming from ajax or not
echo "not_log_in"; // if it is ajax, simply show an error massage
}else{
redirect('account/login'); //otherwise redirect
}
}
将return
添加到您的重定向:
return redirect('account/login');
我认为问题的出现是由于ajax
请求未完成。 当重定向发生时,它继续将其视为ajax
请求,因此它在网络选项卡中显示新页面。
要解决此问题,您必须将其重定向到任何其他 function 并从中发送响应,但是当您在constructor
中检查 session 时,我们必须检查该特定function(method)
的条件。
AJAX
$.ajax({
type:'POST',
url:'<?php echo base_url("cart/addToCart/some_new_function"); ?>', // make a new function {some_new_function}
dataType: 'json', // expects json to be returned
data:{'id':val},
success:function(data) {
if (data == 1) { // fail
window.location.href = "<?php echo base_url('account/login'); ?>"; // your-location-&-logic
}else{
// whatever-you-want-to-do
}
}
});
Controller
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->library('encryption');
$method = $this->router->fetch_method(); // get method name
if($method !== 'some_new_function'){
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
redirect('account/login');
}
}
}
function some_new_function(){ // control will come here from ajax after construct
//perform session check here
if (!$this->session->userdata('id') || $this->session->userdata('role') != 'CUSTOMER') {
echo 0; // fail
}else{
echo 1; // success // perform-your-task-here
}
}
希望这对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.