2014-03-07 53 views
5

单击某个按钮时,我想从数据库中删除某些内容。运行SQL的AJAX请求后不需要的页面刷新

以下是我的点击处理程序。

$('.deleteLesson').click(function() { 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    }); 
}); 

里面DeleteLesson.cshtml,我有以下

var db = Database.Open("database"); 
db.Query("DELETE FROM Lessons WHERE [email protected]", Request.QueryString["LessonID"]); 

$.get运行时,SQL是在我的数据库中执行,但它迫使我原来页面上的刷新。我无法弄清楚为什么。通过故障排除,我发现它完全是导致刷新的db.Query行,而没有其他。

需要明确的是:我可以注释掉db.Query线和它的作品正是我希望它(除非它不会删除的项)

+1

'返回false;'$不用彷徨后'();'呼叫 – zerkms

+0

@zerkms没有运气,对不起。我认为这必定意味着它不是JavaScript,迫使我刷新? – Andy

+0

它是javascript。加载页面后 - 只有JS可以影响其行为 – zerkms

回答

3

我不知道是该笑还是哭了...原来我live.js被强制刷新,因为它看到了变化,想为我更新页面。 (按照预期,我从来没有料到它会在这种情况下这样做)。

感谢大家的帮助...

+0

反过来,笑和哭都会听起来合适:) – Matthew

0

试试这个:

$('.deleteLesson').click(function (el, event) { 
    event.preventDefault(); 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    }); 
}); 

还要检查lessonID是否正确传递给QueryString集合。 SQL查询可能因此而失败。

+2

对不起,说我们需要防止默认,如果它的按钮或超链接停止默认动作来执行..但这已经是一个div所以它没有任何意义调用** preventDefault()** –

+0

我猜它是一个锚点,它会默认预置一个同步GET。 – reach4thelasers

+2

@ reach4thelasers通过OP查看注释,它是一个div。 – Kami

2

对评论有点长 - 但它运行时不运行查询的事实很有趣。如果您尝试从文档page下面会发生什么:

  1. 请求的页面,而忽略结果 - (简单的调用):

    $('.deleteLesson').click(function() { 
        $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID); 
    }); 
    
  2. 警报在每一个可能的结果 - 看看处理程序调用是否有意义,或者被调用的所有:

    var url = '/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID; 
    var jqxhr = $.get(url, function() { 
        alert("success"); 
    }) 
        .done(function() { 
        alert("second success"); 
        }) 
        .fail(function() { 
        alert("error"); 
        }) 
        .always(function() { 
        alert("finished"); 
        }); 
    

怎么样这样的帖子:

$.ajax({ 
type: "POST", 
url: "/Assignment/Modules/DeleteLesson.cshtml", 
data: { LessonID: lessonID } 
}) 
.done(function() { 
    alert("Record Deleted"); 
}); 

最后,你有没有试着用$.ajax代替$.get速记调用?这使您可以访问其他options

1

尝试

$('.deleteLesson').click(function (e) { 
    e.preventDefault(); 
    $.get('/Assignment/Modules/DeleteLesson.cshtml?LessonID=' + lessonID,function(data){ 
    //code here 
    }); 
}); 
0

创建你的控制器的操作,并且不使用呼叫到CSHTML页面。

public class LessonControler{ 

    [AllowGet] 
    public JsonResult DeleteLesson(long LessonID){ 
     //DoTheDeletion magic here 
     return Json(new {Done="OK", Error=""}, JsonRequestBehavior.AllowGet); 
    } 

} 

并更改JavaScript来匹配新的行动呼吁

$('.deleteLesson').click(function() { 
    $.get('/Lesson/DeleteLesson?LessonID=' + lessonID,function(data){ 
    }); 
}); 

甚至更​​好变换这帖子jQuery.post()