javascript - 原型(prototype) AJAX 发布参数随机丢失

标签 javascript asp.net ajax prototype

好吧,我有一个 .NET 应用程序,它使用 Prototype 库对 page-behind 中的 webmethods 进行 AJAX 调用以检索数据。该应用程序已经启动并运行了很长一段时间,没有出现任何问题。最近一位新用户开始使用该应用程序并遇到了一些奇怪的问题。

基本上,发生的情况是他可以正常使用该应用程序一段时间,然后它开始在 AJAX 调用上抛出错误,指出网络方法缺少参数。这是错误:

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 调用都是随机的,而且它似乎总是 web 方法中被称为“缺失”的第一个参数。让我相信帖子数据不会以某种方式恢复? (相关?:JQuery Ajax post parameters sometimes not sent on IE)。

我从来没有能够重现这个问题,也没有任何其他用户遇到过它。这让我相信是这个用户系统上的特定问题导致了这个问题。不幸的是,他们是一个相当重要的用户,所以我需要尝试解决这个问题。用户使用 IE8 作为浏览器。下面是使用原型(prototype)进行 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

如果有人对正在发生的事情有任何想法,我将不胜感激任何意见!我似乎无法在我的研究中找到任何信息来引导我找到可能的原因。同样,它似乎只发生在这个用户身上,所以可能是他这边的浏览器设置(知道什么设置吗?)。但话又说回来,这对他来说甚至是零星的,但一旦开始发生,它就会不断发生,直到他关闭浏览器并重新开始。

最佳答案

我在这里回答是因为我似乎没有足够的声誉来发表评论而不是回答。 请求中缺少什么不是很清楚,但我会继续检查 Web 日志(或设置某种日志记录)以查看系统实际接收到的内容。根据您对问题的描述,请求以某种方式缺少“fleet”参数。但是您并没有在请求中发送这样的值,而是将帖子正文中的所有数据作为序列化的 JSON 字符串发送。 因此,要么传递给 gAjax 的数据不正确/不完整,要么您的服务器上发生了一些奇怪的事情。 我显然怀疑它是前者,但无论如何你应该尝试在两端进行日志和调试。 首先,我会做这样的事情:

function gAjax(url, params, onSuccess, onError, onException, onComplete) {

    params['debug']=Object.toJSON(params);
    new Ajax.Request(url,
//....

这会将 JSON 字符串添加到请求中,以便您可以准确检查发送的内容。

希望这对您有所帮助!

关于javascript - 原型(prototype) AJAX 发布参数随机丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12482718/

相关文章:

javascript - 为 async.parallel 编写测试。

javascript - 拆分键值对,给它们新的键

asp.net sessionID 在回发时更改?

ajax - 在 perl 中 fork 但从子进程中的系统调用中获取退出状态

javascript - 如何过滤 Ajax 请求后服务器的回显响应

Javascript 确认对话框和鼠标中键/右键单击

javascript - setTimeout 立即运行而不是等待延迟值

asp.net - 在 web.config 中写入连接字符串是否安全?

asp.net - 在SQLDatasource中使用存储过程时,Gridview不显示

php - 联系表单中的 From 字段和 mail() 函数存在问题