我开发了一个页面,它通过AJAX将带有图像的表单发送给WebAPI2控制器。
我重复这样做;我让用户选择一些图片,他们添加到一个选择框中,然后用户可以从另一个位置添加更多或者他们可以从列表中删除项目。所以,我把他们填好的表格和一张图片提交给服务器。我专门为每张图片做一次,这样我就可以显示每张图片上传的进度。一旦映像在服务器上,它将由服务器端代码移动到一个安全的存储库。应用程序池正在使用特定的AD帐户来完成它的工作。
这对我来说工作得很好,对其他测试过它的人来说工作得很好,但是我有一个测试人员-在8个测试人员中-他在IE中出现间歇性错误。他不会在另一个浏览器上尝试(我们没有真正的测试者,只有我们的用户,而这个是固执的)
我的服务器端web api代码,这是同一个项目的一部分-甚至没有被击中。我记录我们立即输入了这个方法。此外,服务器端的应用程序日志中没有记录任何错误。AJAX返回"error"one_answers"0"。没有回应文本。我将所有AJAX错误记录到服务器地址(它提交得很好,顺便说一句)
我最初用MVC控制器而不是Web API写这个,但我希望它能解决这个问题。
"提交"表单的按钮不是提交按钮。它是input="button"。我的表单上没有提交按钮。该表单没有要邮寄的地址。我锁定了整个表单,所以没有按钮可以点击,没有元素可以编辑,而项目正在上传。总之,我看不出e.p preventdefault ();会有帮助的。
这实际上不可能是跨站点脚本,我在网上找不到任何表明跨站点脚本策略可以随机触发的内容,但看起来好像是。
有时,他提交的表格和1/3的图片上传和其余的错误。这不是图片的类型,大小,或者其他的——我复制了他上传的图片,然后用它们来验证。
我们在服务器端禁用了跨站点脚本,我在我的服务器端添加了一个JSONP格式化器,他测试了没有错误。我们将继续测试,看看它是否真的解决了问题,因为他之前让它工作,然后问题又出现了。
如果真的是跨站点脚本导致的,为什么?会不会是IIS服务器上的什么东西让它选择了不同的顶级域名,因为我没有在ajax请求中指定一个?
$.ajax({
url: getBaseURL() + 'API/FileForm',
type: 'POST',
data: dataString,
cache: false,
contentType: false,
processData: false
})
Where getBaseURL()表示:
function getBaseURL() {
var baseURL = $("#HiddenCurrentURL").val().trim();
if (baseURL != "/") {
baseURL += "/";
}
return baseURL;
}
With HiddenCurrentURL in my _layout:
@Html.Hidden("HiddenCurrentURL", Request.ApplicationPath)
任何帮助都会很感激。我真不知道现在该怎么办。浏览器设置能做到这一点吗?
编辑:他使用的是IE 11——我和我的其他测试者也是。我和其他一些人都在Chrome和Firefox上做过测试。Edit2:我们禁用了跨站点脚本,但问题仍然存在。我认为有趣的是,这个问题似乎只发生在深夜或清晨,在非工作时间。我检查了IIS组,他们说它运行为"始终打开"…
用户的wifi连接很差,并且在一瞬间断开连接。它会中断ajax请求——没有发送的请求将继续发送,到达服务器的请求将完成,其他的将失败。