Como a Microsoft limita o tamanho dos dados enviados pelo POST, quando a quantidade de dados enviados pelo formulário for grande, será relatado um erro (erro ASP 0107: 80004005). O motivo é que a Microsoft limita o máximo de dados que podem ser recebidos usando Request.Form() a 100K bytes. A solução para o problema é que para um domínio que precisa enviar big data, divida os dados em várias partes menores que o limite antes de enviar o formulário, coloque-os em vários campos ocultos, limpe os campos originais ao mesmo tempo e então enviar formalmente o formulário. O servidor ainda usa Request.Form() para ler os dados em cada campo oculto e, em seguida, juntá-los em ordem. O código principal é o seguinte:
Nota: Você precisa especificar um DIV no código HTML do formulário para inserir dinamicamente o campo oculto nele.
====Código de amostra do cliente====
Adicione: <div id=divHidden></div> ao código HTML no formulário. Adicione: onSubmit=return fnPreHandle(this) à tag do formulário. Substitua o BigField no código abaixo pelo campo do seu formulário que envia o formulário. nome de banco de dados grande.
Código JavaScript
Copie o código do código da seguinte forma:
<linguagem de script=javascript>
//Os dados são divididos e colocados no domínio oculto correspondente, que é acionado no evento onSubmit do Formulário
função fnPreHandle(MeuFormulário)
{
var iCount; //Em quantos domínios dividir
var strData; //dados originais
var iMaxChars = 50000;//Considerando que os caracteres chineses são bytes duplos, o número máximo de caracteres no domínio é limitado a 50K
var iBottleNeck = 2000000; //Se o artigo exceder 2 milhões de palavras, o usuário precisará ser avisado
varstrHTML;
//dados originais
strData = MeuFormulário.BigField.value;
//Se o artigo for muito longo, o usuário precisa ser lembrado
if (strData.length > iBottleNeck)
{
if (confirm(O artigo que você deseja publicar é muito longo, é recomendável dividi-lo em várias partes e publicá-las separadamente./nSe você insistir em enviar, observe que levará muito tempo para enviar com sucesso./ n/nVocê insiste em enviar?) == false )
retornar falso;
}
iCount = parseInt(strData.length / iMaxChars) + 1;
//hdnCount registra em quantos subdomínios o domínio de dados original está dividido
strHTML = <tipo de entrada=nome oculto=hdnCount valor= + iCount + >;
//Gerar código HTML para cada subdomínio
for (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <tipo de entrada=nome oculto=hdnBigField + i + >;
}
//Inserir dinamicamente o código HTML de cada campo oculto no DIV (divHidden) do Formulário
document.all.divHidden.innerHTML = strHTML;
//Atribuir valores a cada subcampo
for (var i = 1; i <= iCount; i++)
{
MyForm.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}
//Limpa o campo de dados original
MeuFormulário.BigField.value = ;
}
</script>
Código de amostra do lado do servidor Código ASP/Visual Basic
Copie o código do código da seguinte forma:
<%
DimstrData
Dim intFieldCount
Escureça eu
intFieldCount = Solicitação.Form(hdnCount)
Para i=1 Para intFieldCount
strData = strData & Request.Form(hdnBigfield & i)
Próximo
Resposta.Write strData
%>