javascript - JQuery $.ajax - 未调用 done()

标签 javascript jquery ajax asp.net-web-api

我有一个 ASP.NET/MVC 站点,使用 JQuery 的 $.ajax() 调用 WebApi Web 服务。其中大多数都工作正常,但我有一个没有调用任何回调函数——done()、fail()、always()。

服务正在被调用,并且根据 Fiddler 的说法,正在返回响应。但 JQuery 没有调用任何回调函数。

其他工作正常。或者看起来是。

每种情况下的调用代码都是相同的:

    core.callService = function (serviceUrl, httpType, token, data, failMessage, callback)
{
    try
    {
        var parameters = {
            type: httpType,
            dataType: "json",
            timeout: ajaxRequestTimeoutMS,
            headers: { "authenticationToken": "" + token }
        };

        if (httpType === "POST" || httpType === "PUT" || httpType === "DELETE")
        {
            parameters.contentType = "application/json; charset=utf-8";
            parameters.data = JSON.stringify(data);
        }
        else
        {
            parameters.data = data;
        }

        debugger;
        $.ajax(serviceUrl, parameters).done(
            function (result, textStatus, jqXHR)
            {
                debugger;
                // ...
            }).fail(function (jqXHR, textStatus, errorThrown)
            {
                debugger;
                // ...
            }).always(function ()
            {
                debugger;
                //whether success or failure
            });
    }
    catch (e)
    {
        debugger;
        callback({
            success: false,
            message: e.message,
            data: null
        });
    }
    finally
    {
        debugger;
    }
};

运行Fiddler,我可以看到请求:

GET http://localhost:52057/api/MyController/myAction?myParameters HTTP/1.1
authenticationToken: eb76272e-b26e-4773-9d22-2218bea8beb1
Accept: application/json, text/javascript, */*; q=0.01
Referer: http://localhost:61986/Feedback?items%5B0%5D.updatetype=
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:52057
DNT: 1
Connection: Keep-Alive
Cookie: ...

响应:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RTpcZGV2XFplYnVcWmVidV93ZWJcdHJ1bmtcWmVidV93c1xhcGlcRW1haWxUb29sXHNlbmRFbWFpbA==?=
X-Powered-By: ASP.NET
Date: Mon, 30 Mar 2015 16:43:32 GMT
Content-Length: 21

{"message":"Success"}

因此,响应返回到客户端,但 JQuery 没有调用 did() 函数、fail() 函数或always() 函数。我不明白为什么。我查看了其他正在运行的网络服务的响应,但我看不出它们有什么不同。

有什么想法吗?

============后续=============

信息越多,困惑就越多。

如果我在页面初始化函数期间调用 Web 服务,则会执行回调。如果我从按钮的单击事件中调用它,则不会。

查看请求和响应,我看到的唯一区别在于请求的引用字段。当我从事件函数调用时,我看到 URL 中附加了“?items[0].updatetype=”。我找不到谁在这样做。

最佳答案

好吧,这只是愚蠢的。经过数小时的深入研究 JavaScript 并监控网络流量,试图找出回调函数未执行的原因......

调用我的网络服务的点击事件是由提交按钮生成的。

啊啊!

关于javascript - JQuery $.ajax - 未调用 done(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29354268/

相关文章:

html - 疯狂的硬 CSS 困境

javascript - 如何通过列表运行 $.ajax?

javascript - Android WebView 下载然后稍后显示在 AlertDialog 中

javascript - 纯CSS关闭按钮

javascript - 奇怪的 while 循环元组

javascript - 我可以将 jQuery 动态加载到局部变量而不是窗口吗?

jquery - 如何让元素相互淡出?

javascript - 如何使用 jQuery 为 IE8 设置背景图像(使用过滤器属性)?

javascript - 在特定显示中隐藏按钮

jquery - 检测 jQuery.load() 上的数据是否发生变化