我在JBOSS EAP 6.3中运行良好的EAR应用程序。当我在EAP 7中运行此应用程序时,几次调用后ajax调用响应为空。主要是jsp页面使用ajax调用servlet。我使用通用代码片段进行AJAX调用。我可以在第3/4次正确得到答复。之后它无法正常工作。整个过程在EAP 6.3中运行良好。
ajax代码段如下:
null
// dataStore是键/值对的数组。
AND clause( and ID_Employees_CODE not in)
try{ objXMLHTTP = new XMLHttpRequest(); }catch(e){ try { objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP.3.0"); } catch(e){ try { objXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP"); } catch(e) { try { objXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { alert("XMLHTTP Not Supported On Your Browser"); return; } } } } var urlstr = "" ; var key = ""; var j = 0;
for(key in dataStore){
if(j == 0) {
urlstr += key + "=" + dataStore[key];
j = 1;
} else {
urlstr += "&" + key + "=" + dataStore[key];
}
}
var _dateTime = new Date().getTime();
urlstr += "&CALLTIME=" + _dateTime + "-";
var requNumber = "?requNumber=" + _dateTime;
// http request has been changed as Parameterised
var _AsyncRequest = true;
try{
if(_httpMode == "undefined")
_httpMode = "0";
}catch(e){
_httpMode = "0";
}
if((_httpMode != "undefined") && (_httpMode != null) && (_httpMode == "1"))
{
_AsyncRequest = false;
}
if(!document.all)
{
_AsyncRequest = false;
}
if(urlstr.length<=1000) {
objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber + "&" + urlstr,false);
} else {
objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber,false);
}
urlstr = URLEncode(urlstr);
objXMLHTTP.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;
//连续请求后此条件失败
//The following is not working after few calls
//代码
if(urlstr.length<=1000) {
objXMLHTTP.send("");
} else {
objXMLHTTP.send(urlstr);
}
rtnXML = objXMLHTTP.responseText;
if (objXMLHTTP.statusText == "OK" )
{
}
答案 0 :(得分:0)
这是因为网址帖子请求中存在字符 | ,并且没有编码长度小于1000的字符串。只需使用
在 if / else 连接条件打开之前urlstr = URLEncode(urlstr);
。
代码段如下:
urlstr = URLEncode(urlstr);
if(urlstr.length<=1000) {
objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber + "&" + urlstr,false);
} else {
objXMLHTTP.open("POST","XMLDHTTPServlet" + requNumber,false);
}
objXMLHTTP.setRequestHeader("content-type", "application/x-www-form-urlencoded") ;
if(urlstr.length<=1000) {
objXMLHTTP.send("");
} else {
objXMLHTTP.send(urlstr);
}
rtnXML = objXMLHTTP.responseText;
URLEncode 函数定义如下:
function URLEncode(urlstr ){
var SAFECHARS = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "-_.!~*'()=?&";
var HEX = "0123456789ABCDEF";
var plaintext = urlstr;
var encoded = "";
for (var i = 0; i < plaintext.length; i++ ) {
var ch = plaintext.charAt(i);
if (ch == " "){
encoded += "+";
}else if (SAFECHARS.indexOf(ch) != -1) {
encoded += ch;
}else {
var charCode = ch.charCodeAt(0);
if (charCode > 255) {
encoded += "+";
}else {
encoded += "%";
encoded += HEX.charAt((charCode >> 4) & 0xF);
encoded += HEX.charAt(charCode & 0xF);
}
}
}
return encoded;
}