我有一个ASP.NET / MVC站点使用JQuery' $ .ajax()调用WebApi webservices。其中大部分工作正常,但我有一个没有回调函数 - 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没有调用done()函数,fail()函数或always()函数。我无法理解为什么。我看过其他网络服务的回复,这些回复正在发挥作用,我看不出有什么不同。
有什么想法吗?
=============跟进=============
更多信息,更多混乱。
如果我在页面初始化函数期间调用webservice,则执行回调。如果我在按钮的点击事件中调用它,则不会。
查看请求和响应,我看到的唯一区别是请求的referer字段。当我从事件功能调用时,我看到"?items [0] .updatetype ="附加到URL。而且我无法找到谁在做那件事。
答案 0 :(得分:1)
调用我的webservice的click事件是由提交按钮生成的。
哎呀!