xhrPost与Firefox和IE的工作方式不同

时间:2011-03-31 12:01:54

标签: ajax dojo struts request

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Ô。

2 个答案:

答案 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应该使用该调用。

谢谢!