我有一个具有data-id属性的按钮元素。我需要使用jquery ajax post方法将data-id发送到codeigniter中的控制器方法。我没有任何形式。但是ajax我做的请求无法进入控制器方法。可能是什么原因以及如何解决这个问题?在我的配置文件中我设置了基本URL并使用htaccess文件重写了index.php:
点击按钮
后,我会收到警报('成功')$config['base_url'] = 'http://localhost/mycodeigniter/ci/'
管理员控制器:
class Admin extends CI_Controller{
public function processReq(){
$this->load->view('admin/processReq');
}
}
按钮(无表格元素):
<button type="button" data-id='approved' class="approved buttons">Approve</button>
ajax方法:
$(".buttons").click(function(event){
var status=$(this).data('id');
$.ajax({
url:"<?php echo base_url('admin/processReq') ;?>",
type: "POST",
data: {
status: status
},
success: function(data) {
alert('success');
},
error: function(xhr, status, error) {
var error=xhr.responseText;
alert(error);
}
});
});
答案 0 :(得分:0)
您收到警报,因为控制器向浏览器发送了服务器代码为200的回复。该标头响应代码告诉AJAX调用success
函数。 $this->load->view('admin/processReq');
是OK(代码200)的来源。
此控制器显示另一种处理方式,以便您可以根据processReq()
的回复做出反应。
class Admin extends CI_Controller
{
public function index()
{
$this->load->view('admin/processReq'); //if this really is the view file
}
public function processReq()
{
$status = this->input->post('status');
//I am assuming that data('id') is '1' or '0' since you
//don't describe what it actually is I had to make something up.
if($status === '1'){
echo json_encode(array('results' => 'success')) ;
}else{
echo json_encode(array('results' => 'fail')) ;
}
}
}
您需要添加一个ajax选项 - dataType: 'json'
- 以便可靠地使用
$.ajax({
url:"<?php echo base_url('admin/processReq') ;?>",
type: "POST",
dataType: 'json',
data: {
status: status
},
您的ajax success
功能可以执行此操作
success: function(data) {
if(data.results === 'success'){
alert('success');
} else {
alert('success');
}
},
指示失败的另一种方法是输出具有400或500(错误)范围内的服务器代码的标头。如果你这样做,那么将调用ajax error
函数。 SO有许多如何实现这一目标的例子。