我正在尝试使用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",
,我会获得成功函数,但我的控制器仍然没有被击中!!
答案 0 :(得分:1)
看起来某些其他控制器操作或处理程序正在服务器上执行此请求。这就是为什么你的控制器动作永远不会被击中的原因。并且触发错误回调的原因可能是因为此处理程序返回HTML或与JSON不同的某些其他内容类型,尽管您明确指示您希望json使用dataType: 'json'
。
所以这可能是一些路由问题。我邀请您查看服务器在发出此AJAX请求时返回的响应的确切内容,该请求可以为您提供有关应用程序中哪个部分/控制器可能返回它的更多详细信息。