asp.net mvc ajax让我发疯

时间:2011-11-27 23:23:45

标签: asp.net-mvc-3 jquery

为什么我发送像这样的ajax请求一切正常

   $(".btnDeleteSong").click(function () {

    var songId = $(this).attr('name');

    $.ajax({
        type: 'POST',
        url: "/Home/DeleteSong/",
        data: { id: songId },
        success: ShowMsg("Song deleted successfully"),
        error:  ShowMsg("There was an error therefore song could not be deleted, please try again"),
        dataType: "json"
    });
});

但是当我将匿名函数添加到成功时它总是向我显示错误消息,尽管该歌曲仍然被删除

 $(".btnDeleteSong").click(function () {

    var songId = $(this).attr('name');

    $.ajax({
        type: 'POST',
        url: "/Home/DeleteSong/",
        data: { id: songId },
        success: function () { ShowMsg("Song deleted successfully"); },
        error: function () {
            ShowMsg("There was an error therefore song could not be deleted, please try again");
        },
        dataType: "json"
    });
});

如果我想在ajax调用成功的事情上做的很少,我需要能够使用匿名函数,我知道它应该如何完成,但是我做错了什么? 我希望成功消息不显示错误。

function ShowMsg(parameter) { 
      $("#msg").find("span").replaceWith(parameter); 
      $("#msg").css("display", "inline"); 
      $("#msg").fadeOut(2000); 
      return false; 
}

2 个答案:

答案 0 :(得分:0)

确保您的操作返回Json数据。

  

“json”:将响应评估为JSON并返回JavaScript对象。在jQuery 1.4中,JSON数据以严格的方式解析;任何格式错误的JSON都会被拒绝,并抛出一个解析错误。 (有关正确的JSON格式的更多信息,请参阅json.org。)

http://api.jquery.com/jQuery.ajax/

答案 1 :(得分:0)

您的操作方法肯定会返回Json数据。我有类似的代码,看看是否有帮助。

 public ActionResult GetAllByFilter(Student student)
    {
        return Json(new { data = this.RenderPartialViewToString("PartialStudentList", _studentViewModel.GetBySearchFilter(student).ToList()) });
    }


 $("#btnSearch").live('click',function () {

        var student = {
            Name: $("#txtSearchByName").val(),
            CourseID: $("#txtSearchByCourseID").val()
        };
        $.ajax({
                    url: '/StudentRep/GetAllByFilter',
                    type: "POST",
                    data: JSON.stringify(student),
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function(result) {
                        $("#dialog-modal").dialog("close");
                        RefreshPartialView(result.data);
                    }
                , error: function() { alert('some error occured!!'); }
                });

    });

上面的代码用于重新加载局部视图。在你的情况下,它应该是直截了当的。

谢谢, 普利文