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