首页 > 解决方案 > 包含 FormData 对象的 Internet Explorer 请求在 Struts 2 中失败

问题描述

总结一下:我对 formData 对象内容的所有请求都适用于 Firefox 和 Chrome。其中一些也可以在 IE11 中工作,但有一个不能。奇怪的是请求没有显着不同。

我使用这个 FormData 对象通过 Json 向 Struts2 发送数据:

formData.append("JsonInput", angular.toJson(encodeURIComponent(JSON.stringify(myVariable))));

此请求在 IE11 中无效,但在 Firefox 和 Chrome 中有效:

$http({
    method: 'POST',
    url: appServer + '/rcdCalSaveData',
    respondType: 'json',
    headers: { 'Content-Type': undefined },
    data : formData
})

该示例的实际变量名称已更改。

我在后台控制器中的 Action 方法的结果是 null (JsonInput)。

除此之外,请求发送的其他 FormData 工作(差别不大):

formData.append("JsonAddVariable", angular.toJson(encodeURIComponent(JSON.stringify(anotherVariable))));

$http({
    method: 'POST',
    url: appServer + '/rcdDefAddfdkrfikef',
    respondType: 'json',
    headers: { 'Content-Type': undefined },
    data: formData,
    params: { mode: (service.modeAdd ? 1 : 0) }
})

所以我认为传递的变量是问题(第一个示例中的数组和第二个示例中的对象)。但是,如果我用它替换第一个 FormData 它也可以:

var temp = "%5B%7B%22firstVar%22%3A7%2C%22secondVar%22%3A0%2C%22thirdVar%22%3A-2%7D%5D";
formData.append("JsonInput", temp);

对应于:[{"firstVar":7,"secondVar":0,"thirdVar":-2}]

那么哪些 Object 变量内容会导致 AngularJS 和 Struts2 出现问题?

(我使用的是 IE11)

标签: javascriptjavajsonangularjsstruts2

解决方案


推荐阅读