Jquery AJAX未与Codeigniter控制器匹配
我正在学习AJAX,并从NETTUTS Codeigniter那里从无到有地借用了一个脚本:AJAX 脚本本身可以完美地适应我的表单,但是它不会根据控制器更新数据库。Firebug说,这篇文章在AJAX脚本中运行良好。我想我的问题是,我如何以及在哪里无法启动控制器 开放式脚本的形式Jquery AJAX未与Codeigniter控制器匹配,jquery,ajax,codeigniter,Jquery,Ajax,Codeigniter,我正在学习AJAX,并从NETTUTS Codeigniter那里从无到有地借用了一个脚本:AJAX 脚本本身可以完美地适应我的表单,但是它不会根据控制器更新数据库。Firebug说,这篇文章在AJAX脚本中运行良好。我想我的问题是,我如何以及在哪里无法启动控制器 开放式脚本的形式 echo form_open('contacts/entry', $form); Ajax脚本(在我展示的内容上面有一个验证脚本,可以很好地工作) 使用“if($this->input->post('ajax'))
echo form_open('contacts/entry', $form);
Ajax脚本(在我展示的内容上面有一个验证脚本,可以很好地工作)
使用“if($this->input->post('ajax'))”是启动控制器的正确方法吗?如果没有jquery,表单本身就可以正常工作,并运行控制器。所以我知道这两个单独的部分工作,他们只是没有啮合。谢谢您发布的是字符串
'form\u data'
而不是变量form\u data
,请删除form\u data周围的引号,然后重试
$.ajax({
url: "<?php echo site_url('contacts/entry'); ?>",
type: 'POST',
data: form_data, // <-- previously you had data: 'form_data', which would pass the string 'form_data', not the variable.
success: function() {
$('#status').text('Update successful!');
}
});
jQuery/AJAX
...
success: function(data) {
if(data) {
//alert success
}
else {
//alert failure
}
}
首先,我将删除
var form_data{ajax:'1'}
,并使用如下内容:
if($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest')
{
// This is AJAX
}
else {
// This is standard HTTP
}
protected function is_ajax() {
return ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') ? TRUE : FALSE;
}
处理此问题的一个好方法是使用MY_控制器。如果使用它,请添加如下函数:
if($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest')
{
// This is AJAX
}
else {
// This is standard HTTP
}
protected function is_ajax() {
return ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') ? TRUE : FALSE;
}
您可以使用:
if($this->is_ajax())
{
// This is AJAX
}
else {
// This is HTTP
}
然后,您必须回显结果以将其传递到实际视图并处理操作。像这样:
if ($this->form_validation->run() == TRUE)
{
// Tip: you've to do the data management on MODELS
$action = $this->db->insert('contacts', $data);
// With this method you can handle AJAX and HTTP on the same
// validation. If is AJAX you print, if not you redirect.
if($this->is_ajax())
echo $action;
else {
// if worked, redirect the user to the success
// else send it to the form error
if($action)
redirect("form_success");
else
redirect("form_error");
}
else {
if($this->is_ajax())
echo false;
else {
$this->load->view("error_form");
}
}
您必须更正jQuery代码以处理该操作:
$.ajax({
url: "<?php echo site_url('contacts/entry'); ?>",
type: 'POST',
data: form_data, // Like said jondavidjohn
success: function(data) {
if(data)
{
$('#status').text('Update successful!');
} else {
$('#status').text('Operation failed!');
}
}
});
$.ajax({
url:“”,
键入:“POST”,
数据:form_data,就像jondavidjohn说的那样
成功:功能(数据){
如果(数据)
{
$('状态').text('更新成功!');
}否则{
$('#status').text('操作失败!');
}
}
});
我只是添加了引号,它与引号或之前的引号不起作用。这是一个个人联系人列表,我在表单的正下方有数据库输出。没有jquery,insert可以正常工作。我还回顾了phpmyadmin中的数据库。但我会试试你的建议。我确实收到了“更新成功!”的指示,你是说删除了引号?我会更新我的答案,告诉你ajax调用应该是什么样子。它仍然告诉我调用成功了,只是我没有启动控制器来执行它应该做的插入。它实际上告诉你关于控制器的什么?在控制器中插入之前,请打印r($data);它应该准确地打印出$data中包含的内容,以便您知道信息是否正确传递。向我们显示准确的错误。如果没有它们,我们就看不到发生了什么。是的,所以基本上我建议的所有内容+检查XMLHttpRequest。检查(data==true)是否冗余,默认情况下它会检查它是否为真。@jondavidjohn:谢谢!我编辑它!:)我还添加了一些用于在同一函数中处理ajax和http的工具。当升级到CI 2.0时,可以使用$this->input->is_ajax_request();
$.ajax({
url: "<?php echo site_url('contacts/entry'); ?>",
type: 'POST',
data: form_data, // Like said jondavidjohn
success: function(data) {
if(data)
{
$('#status').text('Update successful!');
} else {
$('#status').text('Operation failed!');
}
}
});