我正在尝试使用jquery ajax删除一些数据,特别是配方的成分,我正在使用CodeIgniter框架,但它失败了。以下是我的代码部分:
$(".delete").live('click',function()
{
var ri_id = $(this).attr('id');
if(confirm("Are you sure you want to delete this ingredient? Action cannot be undone."))
{
var r_id = "<?php echo $this->uri->segment(3); ?>";
alert(ri_id +" " +r_id);
$.ajax({
type: "POST",
url: "/ingredient/delete",
data: "ri_id="+ri_id +"&r_id=" +r_id,
success: function(){
$(this).parent().parent().parent().remove();
},
failure : alert('fail')
});
然后这是我的ingredient.php:
class Ingredient extends CI_Controller {
function delete()
{
$data['ri_id']= $this->input->post('ri_id');
$data['r_id']= $this->input->post('r_id');
if (!empty($data['id']))
{
$this->load->model('ingredient_model', '', TRUE);
$this->ingredient_model->delete_recipe_ingr($data);
$this->output->set_output('works');
}
else
{
$this->output->set_output('dontwork');
}
}
}
和我的模特:
class Recipe_model extends CI_Model
{
public function delete_recipe_ingr($data)
{
$this->db->where($data);
$this->db->delete('st_recipe_ingredients');
}
}
我错过了什么或是我的代码错了吗?我将衷心感谢您的帮助。提前谢谢。
答案 0 :(得分:1)
我的第一个猜测是this
不是你认为的那样:
success: function(){
$(this).parent().parent().parent().remove();
},
来自fine manual:
<强>上下文强>
此对象将成为所有与Ajax相关的回调的上下文。默认情况下,context
是一个对象,表示调用中使用的ajax设置($.ajaxSettings
与传递给$.ajax
的设置合并)。
因此,在success
回调中,this
几乎是一个简单的对象,而不是DOM中的内容。
有两种标准解决方案。您可以保存对this
的引用并使用:
var self = this;
$.ajax({
// ...
success: function() {
$(self).parent().parent().parent().remove();
},
// ...
或使用context
选项$.ajax
:
$.ajax({
// ...
context: this,
success: function() {
$(this).parent().parent().parent().remove();
},
// ...
当然,请修正评论中讨论的failure
内容。