JS 通过URL传递参数的时候,参数的长度是有限制的。前几天做一个传递,获取到的一直是空值。经同事指点,发现有种方法可传递超长的参数。
发出来供朋友们参考一下。
需要传递的值:
var code ="";
for(var i=4;i<aRow;i++){
var depCode = document.get...............;
code = code+","+depCode ;
} //得到的值结构是 ,1,2,3,4,5,6,7,8,9,....................
如果循环很长的话,值的长度是非常长的,比如我要传的是某个新闻的ID号,每个ID 有 14位长度之多,加上 for循环 达到300多次。 这个时候得到的code值长度就非常非常的长了。。。。
一般传递方法的URL结构:window.iframe2.location ="operation.jsp?Code="+code;
用这个方法传递的话,根本跳不过页面去。 确实让人非常纠结。。。 下面提供的方法可解决这一问题。。
function getList(){ //JS...传递长字符串
CellWeb1.SaveEdit()
var parsefile='operation.jsp?cyearid=<%=cyearid%>&itemcode=<%=itemcode%>'; // 要传递的URL
var xmldoc=new ActiveXObject("MSXML.DOMDocument");
var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
xmldoc.async=false;
xmldoc.resolveExternals=false;
xmldoc.loadXML("<root></root>");
var m_sendTxt="";
var aRow =<%=listCount+4%>; //循环的长度
var strcode =""; //要传递的值
for(var i=4;i<aRow;i++){
if(CellWeb1.GetCellDouble(2,i,0)==1){
var depCode = CellWeb1.GetCellString(3,i,0);
strcode = strcode+","+depCode ;
}
} //尽管循环吧,不管你的值是多长我都不怕 ,呵呵。
if(strcode==""){alert("请先选择!");}else{
var roots=xmldoc.documentElement;
var xnode=xmldoc.createNode(1,"Cell_Content",""); //注意加粗的地方,并非无用哦。
xnode.text=strcode; // 不解释
roots.appendChild(xnode);
xmlhttp.open("POST",parsefile,false);
xmlhttp.send(xmldoc);
}
}
接收的时候,也就是在'operation.jsp 如何获取参数呢?
String code = request.getParameter("strcode"); // 通过这一句,得到的值将会是空值。。不过不要灰心,通过下面的一个类可以获取到值。
CellData CellData=new CellData(request);
code=CellData.ReadProcess(); //JSP页面上调用方法 来获取值。。code 将和你的strcode是一样的。。。
方法如下:
package basic;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class FarmerCellData
{
private HttpServletRequest request;
public FarmerCellData()
{
}
//构造函数
public CellData(HttpServletRequest request){
this.request = request;
}
/**
*
* @return
* @throws Exception
* @param 读取Cell里的值存放于xml文件中,再从xml文件中读取,返回内容字符串
*/
public String ReadProcess() throws Exception
{
//从xml文件读取文件
//com.ssit.formatstr.formatstr formatstr=new com.ssit.formatstr.formatstr();
String returnValue = "";
javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance();
javax.xml.parsers.DocumentBuilder builder = factory.newDocumentBuilder();
java.io.InputStream in = request.getInputStream();
String str = "";
String filename=formatstr.getTimeFlag()+".tmp"; //这里是一个tem文件,getTimeFlag是获取的一个时间+2为随机树,随便写吧。
java.io.File file = new java.io.File(""+filename);
if(!file.exists())
file.createNewFile();
//xml数据写入file
java.io.OutputStream out1 = new java.io.FileOutputStream(file);
byte[] buffer = new byte[1000];
int index = -1;
while((index = in.read(buffer))!= -1)
{
out1.write(buffer,0,index);
}
out1.close();
//xml数据写入file结束,xml数据存入file中在通过builder解析成功!
org.w3c.dom.Document doc = builder.parse(file);
//下面是取出doc的內容
org.w3c.dom.Element element1 = doc.getDocumentElement();
String data = "";
//data里实际保存就是客户端发送的数据
org.w3c.dom.NodeList list = element1.getElementsByTagName("Cell_Content");
for(int i = 0 ; i < list.getLength() ; i++){
org.w3c.dom.Node node = list.item(i);
returnValue = node.getNodeName()+"\t:\t"+node.getTextContent();
data = node.getTextContent();
}
System.out.println(data);
if(file.exists())
{
file.delete();
}
//从xml文件读取结束
return data;
}
}