js上传超长字符串给php,JS 传递超长参数。JS传递长字符串

  • Post author:
  • Post category:php


JS 通过URL传递参数的时候,参数的长度是有限制的。前几天做一个传递,获取到的一直是空值。经同事指点,发现有种方法可传递超长的参数。

发出来供朋友们参考一下。

需要传递的值:

var code =””;

for(var i=4;ivar 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=&itemcode=’; // 要传递的URL

var xmldoc=new ActiveXObject(“MSXML.DOMDocument”);

var xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);

xmldoc.async=false;

xmldoc.resolveExternals=false;

xmldoc.loadXML(“”);

var m_sendTxt=””;

var aRow =;                     //循环的长度

var strcode =””;                                            //要传递的值

for(var i=4;iif(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;

}

}