0

我有以下 $.ajax 后调用。它会通过被调用的动作,但随后它甚至会在动作结果完成之前触发函数的“错误”块。此外,似乎每次通过后都会重新加载整个页面。

var pnameVal = '<%: this.ModelCodeValueHelper().ModelCode%>';
            var eidVal = '<%: ViewBag.EventId  %>';
            var dataV = $('input[ name = "__RequestVerificationToken"]').val();
            var urlVal = '<%: Url.Action("New") %>';
            alert('url > ' + urlVal);
            alert('pname - ' + pnameVal + ' eid - ' + eidVal + ' dataV = ' + dataV);

$.ajax({
                url: urlVal,
                //dataType: "JSONP",
                //contentType: "application/json; charset=utf-8",
                type: "POST",
                async: true,
                data: { __RequestVerificationToken: dataV, pname: pnameVal, eId: eidVal },
                success: function (data) {
                    alert('successssesss');
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert(XMLHttpRequest);
                    alert(textStatus);
                    alert(errorThrown);
                    alert('dammit');
                }
            })
            .done(function (result) {
                if (result.Success) {
                    alert(result.Message);
                }
                else if (result.Message) {
                    alert(' alert' + result.Message);
                }
                alert('done final');
                //$('#search-btn').text('SEARCH');
                waitOff();

            });

这是动作

    [HttpPost]
    public ActionResult New(string pname, int eid)
    {
        var response = new ChangeResults { }; // this is a viewmodel class 

        Mat newMat = new Mat { "some stuff properties" };
        Event eve = context.Events.FirstOrDefault(e => e.Id == eid);
        List<Mat> mats = new List<Mat>();

        try
        {
            eve.Mats.Add(newMat);
            icdb.SaveChanges();

            mats = icdb.Mats.Where(m => m.EventId == eid).ToList();

            response.Success = true;
            response.Message = "YES! Success!";
            response.Content = mats;           // this is an object type     
        }
        catch (Exception ex)
        {
            response.Success = false;
            response.Message = ex.Message;
            response.Content = ex.Message;     // this is an object type
        }

        return Json(response);
    }

顺便说一句,在提琴手上,原始数据将返回以下消息:

{"Success":true,"Message":"Added new Mat.","Content":[]}

然后它会再次重新加载整个页面。我想做一个 ajax 调用来显示添加的垫子,而不必加载整个东西。但这并没有发生在atm。

想法?

4

1 回答 1

0

您可能需要在一开始就在您的处理程序中添加 e.preventDefault() (我猜这个 ajax 调用是在单击时进行的,这是在某处处理的,这就是我正在谈论的处理程序)。

于 2013-07-30T05:23:39.393 回答