在PHP中使用AJAX和重定向发送数据

在PHP中使用AJAX和重定向发送数据,php,jquery,ajax,codeigniter,Php,Jquery,Ajax,Codeigniter,我在使用AJAX单击按钮时发送数据。当数据被发送到PHP服务器(Codeigniter framework)时,它将在服务器上进行一些处理并从数据库中检索数据,然后将检索到的数据重定向到另一个页面 下面是AJAX调用 jQuery.ajax({ url: baseURL + "admin/reports/", data: {rep_id:report_ids}, type: "POST", success:function(data){ var objData = jQuery.par

我在使用AJAX单击按钮时发送数据。当数据被发送到PHP服务器(Codeigniter framework)时,它将在服务器上进行一些处理并从数据库中检索数据,然后将检索到的数据重定向到另一个页面

下面是AJAX调用

jQuery.ajax({
 url: baseURL + "admin/reports/",
 data: {rep_id:report_ids},
 type: "POST",
 success:function(data){
 var objData = jQuery.parseJSON(data);
}
});
下面是PHP的处理过程

$data = $this->admin_model->fetch_date($this->input->post('rep_id', TRUE));
$this->load->view('user/report', $data);
如果我使用上面的PHP代码,那么它不会重定向到另一个页面,但它会尝试将完整的视图文件作为AJAX发送一个响应(我可以通过inspect在浏览器中看到)


因此,我的问题是,如何使用完整的
$data
数组执行重定向?

首先,您必须使用参数中的id重定向到所需的视图,如

$para array( 'id'=>$report_ids);
redirect('admin/reports/'.$para);
在重定向到URL之后,您应该已经发送了ajax调用

jQuery.ajax({
 url: baseURL + "admin/reports/",
 data: {rep_id:report_ids}, // Here you have to get your id from url with jQuery
 type: "POST",
 success:function(data){
 var objData = jQuery.parseJSON(data);
}
});
现在,您在重定向页面上有了完整的数据


可以使用jQuery将其附加到任何div

像这样试试……在php中,必须使用
json\u encode()
发送回响应,如下所示

$data = $this->admin_model->fetch_date($this->input->post('rep_id', TRUE));//Fetch your data in array format

echo json_encode($data);
然后在您的AJAX中

jQuery.ajax({
 url: baseURL + "admin/reports/",
 data: {rep_id:report_ids}, // Here you have to get your id from url with jQuery
 type: "POST",
 success:function(data){
 var objData = jQuery.parseJSON(data);//objData is in object format...
 //try  console.log(objData);
 window.location.href('user/report?name='+objData.name);//name is attribute of your object
}
});

您以错误的方式使用ajax

当通过ajax调用php进程时,php中的重定向不再有意义。通过ajax检索数据后,应该在jQuery中执行重定向

首先,只需在php中回显json数据:

$data = $this->admin_model->fetch_date($this->input->post('rep_id', TRUE));//Fetch your data in array format

echo json_encode($data);
然后在检索到数据时重定向:

jQuery.ajax({
 url: baseURL + "admin/reports/",
 data: {rep_id:report_ids}, // Here you have to get your id from url with jQuery
 type: "POST",
 success:function(data){
 // do not pars json!
 window.location = '/user/report?data=' + objData; // sending json as a string in query string
}
});
现在在
/user/report
中使用jQuery查看pars json的用法

更新:

我认为你根本不需要ajax!Ajax是为了帮助我们避免重定向

试试这个:

<a href="/admin/report"> GET REPORT! </a>

如果使用代码点火器,您可以尝试使用
flashdata
(临时会话)和
标题

尝试:

然后在
用户/报告中
获取数据使用:

$this->session->flashdata('tempValue');

但是首先,如果您使用标准的
html
POST
将数据通过
action=“admin/reports/”
使用普通的
web表单
action=“admin/reports/”
,我认为您根本不需要ajax。在本例中,您的
PHP
可以与OP中的完全相同我删除了AJAX,并在JS中执行了简单的重定向

window.location = baseURL + 'admin/reports/test/' + rep_id;
然后PHP代码,使用
rep_id
作为函数变量,进行处理并加载查看页面

public function test($in)
{
  $data['test'] = $this->admin_model->fetch_insight($in);
  $this->load->view('user/report', $data);
}

是否要将数据发送回页面进行渲染?我不希望返回此页面上的数据,但是需要转到另一个页面我想你不能重定向到另一个页面..从php代码…使用js上的
location.href
来重定向。@HikmatSijapati
不能重定向到另一个页面..从php代码
这绝对不真实…你只需要使用标题(“location:xxxx”)@Nishanth Matha我认为不可能在ajax调用中从php重定向…因此页面是从js重定向的。@HikmatSijapati无论它是什么调用,一旦脚本遇到
header
它都会重定向,我尝试了相同的方法并以相同的方式使用,但我的$data是完整的数组,如何在windw.location中将其作为数组传递?@rjcode但我认为这种方式效率不高!尝试重定向到
user/report
,首先单击,然后从那里发送ajax请求是的,我意识到没有必要使用ajax,我在JS和PHP中做了一些更改,并获得了所需的结果,现在在我的答案中更新,谢谢..你的意思是更新你的问题!问题解决了吗!?
window.location = baseURL + 'admin/reports/test/' + rep_id;
public function test($in)
{
  $data['test'] = $this->admin_model->fetch_insight($in);
  $this->load->view('user/report', $data);
}