Ajax POST有时无法调用ASP.NET MVC控制器操作

时间:2012-12-21 04:17:39

标签: jquery ajax asp.net-mvc

我正在开发基于ASP.NET MVC 3的应用程序,并在尝试对其中一个控制器操作执行Ajax POST(通过jQuery)时看到间歇性问题。有时,控制器操作被调用得很好并且代码按预期执行,但有时,控制器操作永远不会被调用,浏览器基本上会挂起,直到请求最终超时。

这令人沮丧,因为我们不能始终如一地重现这个问题。另一方面,它经常发生,我们通常可以在没有太多努力的情况下实现它。我可以在Firebug的“网络”标签中看到浏览器肯定会发出POST请求,我知道它正在点击正确的URL。我还没有做过的一件事,但我在其他地方看到的建议,就是在中间设置Fiddler以查看请求到达的程度。但是假设它使它成为Web服务器(IIS),那么调试它的下一步应该是什么?我没有强大的Windows / .NET / IIS背景,因此我不知道从哪里开始寻找。

更新

这是执行POST的jQuery代码:

var self = this;
var jsonData = foo.toJSONString();

$.ajax({
    type: 'POST',
    dataType: 'json',
    url: '/MyController/AddFoo',
    data: { foo: jsonData },
    success: function (data) {
        self.showSuccessfulSubmissionDialog();
    },
    error: function (xhr, textStatus, error) {
       self.showUnsuccessfulSubmissionDialog(xhr.responseText);
    }
});

这是控制器操作的C#代码:

[HttpPost]
[Authorize]
public JsonNetResult AddFoo(string foo)
{
    var fooObject = JsonConvert.DeserializeObject<Foo>(foo, SerializerSettings);
    try
    {
        // Do something with fooObject
    }
    catch (Exception ex)
    {
        var formattedString = ex.Message.Replace("\r\n", " ");
        return BuildErrorResult("An error occured writing data to the server: " +
            formattedString);
     }
     return BuildSuccessResult();
}

一些细节(特别是变量名称)已被更改,但其中的要点如下所示。同样如前所述,在这种“破坏”的情况下,Firebug声称POST已被执行,但我从未在控制器动作开始时在断点处降落;所以在某个地方,球会掉下来。除非那些时候没有,并且控制器动作没有任何问题。

1 个答案:

答案 0 :(得分:0)

一种方法是使用“完成”而不是“成功”,当服务器返回200状态代码时会成功触发成功。每次请求完成时都会触发完成

$.ajax({
...
    complete: function(jqXHR, textStatus) {
       self.showUnsuccessfulSubmissionDialog(xhr.responseText);
    }
...
});