javascript - Action Controller 完成但 AJAX 成功回调未调用?

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

我有一个脚本,可以创建 JSON 对象并将其发送到我的操作 Controller 。 ActionController 接收对象并知道如何将其模型绑定(bind)到 ViewModel。

Action Controller 非常简单,如下所示:

[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;
}

我已经调试了操作 Controller ,并且在我进入之前 JavaScript 警报已完成(假)

"return "Finished";

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

最佳答案

AJAX 的重点在于它是异步的,这意味着您只能在成功回调中处理结果。 $.ajax方法向服务器发起 AJAX 请求并立即返回。在此阶段,finished 的值仍然为 false,并且您将离开该函数。很久以后,当 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
    }
});

此外,我建议您让 Controller 操作始终返回操作结果而不是字符串:

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

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

关于javascript - Action Controller 完成但 AJAX 成功回调未调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7779063/

相关文章:

javascript - 使用带有自定义组件的 redux-form react JS

javascript - 内联 javascript 正在中断 html 的加载

javascript - Protractor :如何获取当前的浏览器宽度?

asp.net - 保护返回 JSON 的 ASP.NET MVC Controller 操作

javascript - 从禁用的复选框中发布值

javascript - 遍历 ViewData 数组并使用 javascript 代码

javascript - 在 Javascript/jQuery 中克隆一个事件对象

javascript - YouTube API json 网址

javascript - 需要在打印预览对话框中单击取消和打印按钮时关闭 iframe

jQuery 我如何解决 Jquery 冲突