Struts 1.3和Dojo存在问题。 我使用xhrPost进行ajax调用,如下所示:
dojo.xhrPost( {
url: contesto+"/my_struts_action.do",
content: {valore: valore, phase: indexPhase, field: indexResult, property: tipoCampo},
handleAs: "text",
sync: true,
timeout: 50000,
// The LOAD function will be called on a successful response.
load: function(response, ioArgs) { //
return response; //
},
// The ERROR function will be called in an error case.
error: function(response, ioArgs) { //
console.error("HTTP status code: ", ioArgs.xhr.status); //
return response; //
}
});
这是Action方法:
public ActionForward saveResultValue(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest request,
HttpServletResponse response) throws ModuleCompileException {
String value = request.getParameter("valore");
...
}
我使用了request.getParameter(“valore”),我在FF或IE(Firefox或Internet Explorer)中有不同的结果。 在FF中,我收到一个带有特殊字符的正确字符串,但在IE中,我收到一个错误的字符串。
例如: 我从xhrPost方法发送“unità”。 使用FF,struts方法接收正确的字符串,IE收到“unitÔ。
答案 0 :(得分:0)
我怀疑这是因为xhrPost中的浏览器差异。更可能是来自服务器的编码头或html头开头的编码声明。浏览器应始终以接收页面的编码方式回答请求。
检查服务器头(假设utf -8):
Content-Type: text/html; charset=utf-8
和html头:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
见这里: http://bugs.dojotoolkit.org/ticket/6037
通过在顶部菜单上使用view-&gt;编码并查看当前选择的内容,确保两个浏览器都认为页面采用相同的编码方式。并且,与引用的故障单中的建议一样,使用firebug或类似的工具来检查服务器的标头。
答案 1 :(得分:0)
我解决了我的问题。 我在xhrPost call上添加了headers属性。
dojo.xhrPost( {
url: contesto+"/distribution/update_result_value.do",
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" },
content: {valore: valore, phase: indexPhase, field: indexResult, property: tipoCampo},
handleAs: "text",
sync: true,
timeout: 50000,
// The LOAD function will be called on a successful response.
load: function(response, ioArgs) { //
return response; //
},
// The ERROR function will be called in an error case.
error: function(response, ioArgs) { //
console.error("HTTP status code: ", ioArgs.xhr.status); //
return response; //
}
});
可能IE在xhrPost调用中使用了页面字符集(在我的例子中,iso)。标题属性特定哪个charset应该使用该调用。
谢谢!