1. 程式人生 > >JS 傳遞超長引數。JS傳遞長字串

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