日期:2014-05-16 浏览次数:20735 次
function createXmlHttpRequest(){ var oXmlHttp; if(window.XMLHttpRequest){ //非IE浏览器 oXmlHttp = new XMLHttpRequest(); if(oXmlHttp.overrideMimeType){ //针对于FireFox浏览器,传参数出现的问题,设置MimeType oXmlHttp.overrideMimeType('text/xml'); } return oXmlHttp; } else if(window.ActiveXObject){ var aVersions = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0", "MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"]; for(var i in aVersions){ try{ oXmlHttp = new ActiveXObject(aVersions[i]); return oXmlHttp; } catch(oError){ } } } return null; } /* * Function:向服务器发出同步请求 * @param:url 服务器地址(包括用post方法提交的参数) * @param:param 向服务器提交的内容 * 当header值为null时,设置了application/x-www-form-urlencoded后, * 可以通过Form进行Post提交,在后台用getParameter方法接收参数 * 当header值不为null时,采用字符流传递参数,使用getReader方法获得参数, * 此方式扩展后可以用来文件上传,使用getInputStream方法获得文件流 */ function SendHttpSync(url,param,header){ var strRtn=""; if (navigator.onLine == false){ return "Off Line!" } var xmlhttp = createXmlHttpRequest(); //同步调用,open方法的第三个参数为false xmlhttp.open("post", url, false); if(header == null){ // 设置了application/x-www-form-urlencoded后,可以通过form进行post提交, // 在后台使用getParameter方法获得参数,否则需要使用getReader方法获得参数 // 可以扩展后进行文件上传,使用getInputStream方法获得文件流 xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); } try{ //向服务器发送数据 xmlhttp.send(param); } catch (exception){ alert(xmlhttp.parseError.reason); } try{ //从服务器端接收反馈回来的数据,用responseText方法, //数据格式必须是字符串,在服务器端setContentType为text/html //从服务器端接收反馈回来的数据,用responseXML 方法, //数据格式必须是xml, 在服务器端setContentType为text/xml var strRtn = xmlhttp.responseText; } catch (exception){ if (exception.description == '系统错误: -1072896748。'){ alert(xmlhttp.parseError.reason); strRtn = ""; } } return strRtn; } function SendSyncByJson(){ var param = "{\"hreflist\":[{\"maxpage\":7,\"pageid\":1}]}"; var myData = JSON.parse(param); //另一种解析JSON的方法 //var myData = eval("("+param+")"); var url = "http://" + location.host + "/ajaxapp/initAction.do?pageid=1"; //同步调用 var strRtn = SendHttpSync(url,JSON.stringify(myData),""); if(strRtn == ""){ return; } alert(strRtn); }
?在后台Servlet中:
response.setContentType("text/html;charset=UTF-8"); // strKey为URL地址?后的参数 String strKey = new String(request.getQueryString()); //获得URL传递的参数, //如果在客户端设置了contentType为application/x-www-form-urlencoded //那么send方法的参数param以键值形式传递的参数也可以用这种方法获得 String strParam = (String) request.getParameter("pageid"); // 计算前台Send方法传来的param参数(可以是XML串)存入strXml中 BufferedReader in = request.getReader(); String line = null; strXml = ""; while ((line = in.readLine()) != null) { strXml = strXml + line; }
??最后使用write方法来返回字符串给客户端
response.getWriter().write(json.toString());
?以上方法实现跨浏览器,IE和FireFox已经测试通过