我开发了一个页面,通过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组,并且他们表示它的运行方式为“始终开启”,但...
也许和IE版本有关..你可以提供IE版本吗? – Hackerman
@Hackerman不知道它是否会告诉我我添加了,但版本是IE 11 - 对于所有的测试人员。 – nebulous