2016-09-15 84 views
0

我开发了一个页面,通过AJAX将带有图像的表单张贴到WebAPI2控制器。为什么JQuery AJAX间歇性地返回错误0?

我反复这样做;我让用户选择一堆图像,添加到选择框,然后用户可以从另一个位置添加更多的图像,或者他们可以从列表中删除项目。 因此,我将它们填写的表单提交给服务器。我为每个图像专门做一次,以便我可以显示每个图像上传的进度。 一旦图像在服务器上,它就会被我的服务器端代码移动到一个安全的存储库。应用程序池正在使用特定的AD帐户来完成它的工作。

这对我来说很好,对于其他已经测试过的其他人来说非常适用,但我有一个单独的测试人员 - 超过8人,他们在IE中遇到间歇性错误。他不会在另一个浏览器中尝试它(我们没有实际的测试人员,只是我们的用户,而且这个人很固执)

我的服务器端web api代码,它是同一个项目的一部分,甚至没有击中。我记录下我们立即进入方法。此外,服务器端的应用程序日志中没有记录错误。 AJAX返回“错误”和“0”。没有响应文本。我记录所有AJAX错误到服务器地址(提交就好了,顺便说一句)

我最初用MVC控制器而不是Web API写了这个,但是我希望它能解决这个问题。它没。

“提交”表单的按钮不是提交按钮。它是输入=“按钮”。我的表单上没有提交按钮。该表单没有要发布的地址。我锁定整个表单,因此无法点击任何按钮,在项目上传时不能编辑任何元素。总之,我看不到e.preventDefault();会有帮助。

这实际上并不是跨站点脚本,而且我也找不到任何联机内容,这表明跨站脚本策略可能会随机触发,但看起来好像它是。

有时,他提交了表格和1/3的图片上传和其他错误。这不是图像类型,尺寸或其中的任何一种 - 我复制了他上传的图像并用它们进行验证。

我们在服务器端禁用了跨站点脚本,并且在我身上添加了一个JSONP格式化程序,他测试了它没有错误。我们将继续测试,看看它是否真的解决了这个问题,因为他之前已经开始工作,然后问题再次出现。

如果真的是导致它的跨站点脚本,为什么?请问IIS服务器上有什么东西可以选择不同的顶级域名,因为我没有在我的ajax请求中指定一个域名?

$.ajax({ 
    url: getBaseURL() + 'API/FileForm', 
    type: 'POST', 
    data: dataString, 
    cache: false, 
    contentType: false, 
    processData: false 
}) 

凡getBaseURL()说:

function getBaseURL() { 
    var baseURL = $("#HiddenCurrentURL").val().trim(); 
    if (baseURL != "/") { 
     baseURL += "/"; 
    } 
    return baseURL; 
} 

随着HiddenCurrentURL在我_layout作为:

@Html.Hidden("HiddenCurrentURL", Request.ApplicationPath) 

任何帮助,将不胜感激。我不确定现在该做什么。浏览器设置可以这样做吗?

编辑:他正在使用IE 11 - 正如我和我的其他测试人员。我也有,还有一些其他人也在Chrome和Firefox中测试过。

编辑2:我们禁用了跨站脚本,问题在继续。我认为有意思的是,这个问题似乎只发生在深夜或者清晨,在下班时间工作。我检查了IIS组,并且他们表示它的运行方式为“始终开启”,但...

+0

也许和IE版本有关..你可以提供IE版本吗? – Hackerman

+0

@Hackerman不知道它是否会告诉我我添加了,但版本是IE 11 - 对于所有的测试人员。 – nebulous

回答

0

用户有一个很糟糕的无线网络连接,并且正在断开连接。它会中断ajax请求 - 那些没有发送的请求仍然会发送,并且到达服务器的请求将完成,其他请求将失败。

相关问题