Action Controller完成但是没有调用AJAX成功回调?

时间:2011-10-15 16:25:08

标签: javascript jquery asp.net-mvc-3 asp.net-mvc-2

我有一个创建JSON对象的脚本并将其发送到我的Action Controller。 ActionController接收对象并知道如何将其模型绑定到ViewModel。

动作控制器非常简单,如下所示:

[HttpPost]
        public String SaveNumberMatrix(NumberViewModel model) {
            return "Finished";
        }

AJAX功能:

function saveNumberMatrix(object, actioncontroller) {

    var finished = false;

    $.ajax({
    url: actioncontroller,
    type: 'POST',
    data: JSON.stringify(object),
    dataType: 'json',
    processData: false,
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        alert(data);
        finished = true;
        },   
    });
    alert(finished);
    return finished;
}

我已经调试了Action Controller,并且在我进入

之前,javascript警告已经完成(false)
"return "Finished";

永远不会调用成功回调 我在哪里做错了?

4 个答案:

答案 0 :(得分:3)

AJAX的重点在于它是异步的意味着你只能在成功回调中处理结果。 $.ajax方法向服务器启动AJAX请求,并立即返回。在这个阶段,完成的值仍然是假的,你将离开该功能。很久以后,当AJAX完成成功回调时,就会执行。只有在此回调中,您才能使用从服务器发送的结果。

使用AJAX时,不应按顺序和同步方式组织javascript代码。

所以它应该是这样的:

$.ajax({
    url: '/actioncontroller/savenumbermatrix',
    type: 'POST',
    data: JSON.stringify(object),
    dataType: 'json',
    processData: false,
    contentType: 'application/json; charset=utf-8',
    success: function (data) {
        // TODO: only here you can use the results of an AJAX call
    }
});

另外,我建议您让控制器操作始终返回操作结果而不是字符串:

[HttpPost]
public ActionResult SaveNumberMatrix(NumberViewModel model) {
    return Json("Finished");
}

您的代码的另一个问题是您将dataType: 'json'指示为响应并从服务器返回字符串Finished,这是一个无效的JSON。

答案 1 :(得分:0)

你没有进入成功回调,因为你没有发回有效的json,你需要发送json,因为你的dataType是json。因此它可能会引发错误。

来自jQuery文档:

dataTypeString
Default: Intelligent Guess (xml, json, script, or html)
The type of data that you're expecting back from the server. 

在您的情况下,您指定的是json,但显然没有发回json

答案 2 :(得分:0)

您的ajax请求似乎无法访问服务器。请使用ajax错误功能。

error: function(a,b,c){alert(a+b+c)}

找出问题

答案 3 :(得分:0)

将async参数添加为false(async:false),然后将同步调用AJAX方法。