好的,所以我有一个 .NET 应用程序,它使用 Prototype 库对页面隐藏中的 webmethods 进行 AJAX 调用以检索数据。这个应用程序已经启动并运行了很长一段时间,没有任何问题。最近一位新用户开始使用该应用程序并遇到一些奇怪的问题。
基本上,发生的事情是他可以在一段时间内正常使用该应用程序,然后它开始在 AJAX 调用上抛出错误,说明 webmethod 缺少参数。这是错误:
System.InvalidOperationException - Unable to perform the requested action: Invalid web service call, missing value for parameter: 'fleet'.
at System.Web.Script.Services.WebServiceMethodData.CallMethod(Object target, IDictionary'2 parameters)
at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary'2 parameters)
AT SYSTEM.WEB.SCRIPT.SERVICES.RESTHANDLER.INVOKEMETHOD(HTTPCONTEXT CONTEXT, WEBSERVICEMETHODDATA METHODDATA, IDICTIONARY`2 RAWPARAMS)
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)
不只是一个调用搞砸了,任何 ajax 调用都是随机的,而且它似乎总是 webmethod 中的第一个参数被称为“丢失”。让我相信帖子数据不会以某种方式恢复?(相关?: JQuery Ajax post 参数有时不会在 IE 上发送)。
我从来没有能够重新创建这个问题,也没有任何其他用户遇到过。这让我相信这是导致问题的用户系统上的特定问题。不幸的是,他们是一个相当重要的用户,所以我需要尝试解决这个问题。用户有 IE8 作为他们的浏览器。下面是使用原型进行 ajax 调用的代码:
function gAjax(url, params, onSuccess, onError, onException, onComplete) {
new Ajax.Request(url,
{
method:'post', //Post
contentType:"application/json; charset=utf-8", //As JSON
postBody:Object.toJSON(params), //Post Body is JSON string
sanitizeJSON:true, //Sanitize the JSON
onComplete:onComplete, //Set user on complete
onSuccess:onSuccess, //Set user on success
onFailure:onError, //Set user on error
onException:onException //Set user on exception
});
}
onComplete、onSuccess、onError、onException 是函数回调。params 是一个像下面这样的对象:
{'舰队':'fleetVal','bin':1234}
Url就是方法,比如Bin.aspx/LoadBinInfo。该方法在后端定义如下:
<System.Web.Services.WebMethod()> _
Public Shared Function LoadBinInfo(ByVal fleet As String, ByVal bin As Integer) As Dictionary(Of String, Object)
'.....
'Returns a dictionary of info
End Function
如果有人对正在发生的事情有任何想法,我将不胜感激任何输入!我似乎无法在我的研究中找到任何信息来引导我找到可能的原因。同样,它似乎只发生在这个用户身上,所以可能是他的浏览器设置(任何想法什么设置?)。但对他来说,这也是零星的,但一旦开始发生,它就会不断发生,直到他关闭浏览器并重新开始。