JS 传递超长参数。JS传递长字符串

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;
  
  
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值