Ajax返回statusCode 200但命中错误函数

时间:2015-11-29 11:36:52

标签: jquery ajax asp.net-mvc

我正在尝试使用ajax发回我的控制器。我在控制器中放置断点的问题从未被打过。

var result = {
            Name: document.getElementById("ProjectItem_Name").value,
            Description: document.getElementById("ProjectItem_Description").value,
            DependancyTaskName: dependancyTask
        };

        ajaxCall.postNow("NewTask", JSON.stringify(result), success, failed, failed);

如您所见,我将所有内容推送到名为postNow的函数,即

var ajaxCall = new function () {
this.postNow = function (url, data, successDelegate, failDelegate, errorDelegate) {

    $.ajax({
        type: "POST",
        url: url,
        contentType: "application/json;",
        data: data,
        dataType: "json",
        success: function (response) {
            successDelegate(response);
        },
        failure: function (e) {
            failDelegate(e);
        },
        error: function (e) {
            errorDelegate(e);
        }
    });
};
}

这是我的HomeController

 [HttpPost]
 public JsonResult NewTask(string Name,  string Description, string DependancyTaskName)
 {
     return Json("true", JsonRequestBehavior.AllowGet);
     //also tried  return Json(new { success=true }, JsonRequestBehavior.AllowGet);
 }

我还要指出,如果我在Chrome中单步执行javascript,当代码到达$ ajax调用时,它会立即跳转到错误函数。我在我的控制器上设置了一个断点,发现它永远不会被击中。

Ajax request returns 200 OK, but an error event is fired instead of success通常使用不正确的返回类型显示问题,但由于我的控制器没有被击中,我怀疑它根本没有获得返回类型。

我尝试更改网址并认为这就是问题所在。如果我传递URL“NewTask”,它会向我显示statusCode 200,但会出现错误。但是,如果我然后将URL重命名为ThisDoesNotExist,则同样的问题仍然存在。奇怪的是,如果我将其更改为Home / NewTask,那么我会在帖子上获得404!

然后,如果我从ajax调用中注释掉dataType: "json",,我会获得成功函数,但我的控制器仍然没有被击中!!

1 个答案:

答案 0 :(得分:1)

看起来某些其他控制器操作或处理程序正在服务器上执行此请求。这就是为什么你的控制器动作永远不会被击中的原因。并且触发错误回调的原因可能是因为此处理程序返回HTML或与JSON不同的某些其他内容类型,尽管您明确指示您希望json使用dataType: 'json'

所以这可能是一些路由问题。我邀请您查看服务器在发出此AJAX请求时返回的响应的确切内容,该请求可以为您提供有关应用程序中哪个部分/控制器可能返回它的更多详细信息。