动态URL太长(2568个字符),试图缩短它

时间:2012-05-14 17:12:16

标签: php javascript postgresql netbeans

the message i get from the chrome console 我在drupal网站上使用javascript,但保存功能似乎只在我点击“保存”按钮2次后才能工作。触发该函数的代码是:

var param ="&usuario="+usuario+"&nivel="+nivel+gano+porc_gano+gasto+porc_gasto+tengo+porc_tengo+debo+     porc_debo+plazo_debo;
var s = document.createElement("script");
s.type = "text/javascript"; s.async = true;
s.src = server_direction +"setMisDatos?callback=respuestaGuardarMisDatos&param="+encodeURIComponent(param);
var h = document.getElementsByTagName("script")[0];
h.parentNode.insertBefore(s, h); //or h.appendChild(s);

chrome控制台告诉我错误是在我复制的最后一行,但我不承担它是什么样的错误。

使用chrome控制台(特别是“网络”控制台),我看到它是用红色写的,状态/文字“失败”,输入“未定义”大小/内容“13 B / 0 B”;当它工作时它是:状态/文本“200 / OK”,键入“text / json”,大小/内容“256 B / 38B”。我不是这方面的专家,是否有更多可能有用的信息?

代码触发netbeans函数,将数据存储到postgresql数据库,所以当我点击“保存按钮”时,我有100个变量需要存储。

变量是这样写的(在js文件中):

var plazo_debo_casa1 = (getValor("plazo_debo_casa1"));
var plazo_debo_casa2 = (getValor("plazo_debo_casa2"));
var plazo_debo_casa3 = (getValor("plazo_debo_casa3"));
var plazo_debo_prestamo1 = (getValor("plazo_debo_prestamo1"));
var plazo_debo_prestamo2 = (getValor("plazo_debo_prestamo2"));
var plazo_debo_prestamo3 = (getValor("plazo_debo_prestamo3"));
var plazo_debo ="&plazo_debo_casa1="+plazo_debo_casa1+"&plazo_debo_casa2="+plazo_debo_casa2+"&plazo_debo_casa3="+plazo_debo_casa3+"&plazo_debo_prestamo1="+plazo_debo_prestamo1+"&plazo_debo_prestamo2="+plazo_debo_prestamo2+"&plazo_debo_prestamo3="+plazo_debo_prestamo3;

然后一起在“param”变量中。现在更清楚了吗?

我在firefox中安装了httpfox,然后我检查了发生了什么,最后我认为我得到了错误:它说NS_ERROR_NET_RESET。这是实际的错误吗?我能做些什么来解决它?

我一直在网上搜索,可能我的问题是网址太长了,

http://www.mirodinero.com:8080/mirodinero-war/setMisDatos?callback=respuestaGuardarMisDatos&param=%26usuario%3DIsa%20Mirodinero%26nivel%3D109%26gano_sal_neto%3D211113.45%26gano_sal_prof%3D2480%26gano_monet%3D0%26gano_renta_fija%3D0%26gano_renta_vble%3D0%26gano_inmuebles%3D2226.75%26gano_otros%3D2223.73%26gano_otros_ing%3D2411.12%26porc_gano_monet%3D0%26porc_gano_rentaf%3D0%26porc_gano_rentav%3D0%26porc_gano_inm%3D2%26porc_gano_otros%3D2%26porc_gano_otros_ing%3D1%26gasto_casa1%3D1306.46%26gasto_casa2%3D2402.38%26gasto_casa3%3D3999.57%26gasto_prestamo1%3D93475.58%26gasto_prestamo2%3D7325.88%26gasto_prestamo3%3D34090.9%26gasto_tarjetas%3D29443.2%26gasto_ibi%3D5670%26gasto_imp_otros%3D6780%26gasto_seg_inm%3D1320%26gasto_seg_pens%3D3451.22%26gasto_seg_vida%3D2330%26gasto_seg_plan%3D34230%26gasto_seg_medico%3D21220%26gasto_seg_coche%3D220%26gasto_luz%3D620%26gasto_agua%3D4550%26gasto_gas%3D320%26gasto_telef_f%3D22320%26gasto_telef_m%3D2350%26gasto_internet%3D20%26gasto_tv%3D3450%26gasto_hogar%3D20%26gasto_comida%3D20%26gasto_cenas_copas%3D20%26gasto_viajes%3D20%26gasto_vacaciones%3D220%26gasto_mobiliario%3D220%26gasto_ropa%3D2320%26gasto_transp%3D230%26gasto_otros%3D3620%26gasto_colegios%3D240%26gasto_univ%3D340%26gasto_master%3D2230%26gasto_otros_gastos%3D7323433%26porc_gasto_tarjetas%3D0%26porc_gasto_ibi%3D0%26porc_gasto_trib%3D0%26porc_gasto_seg_inm%3D0%26porc_gasto_seg_pens%3D0%26porc_gasto_seg_vida%3D2%26porc_gasto_seg_plan%3D2%26porc_gasto_seg_med%3D0%26porc_gasto_seg_coche%3D0%26porc_gasto_sum_luz%3D2%26porc_gasto_sum_agua%3D2%26porc_gasto_sum_gas%3D0%26porc_gasto_sum_teleff%3D0%26porc_gasto_sum_telefm%3D0%26porc_gasto_sum_int%3D0%26porc_gasto_sum_tv%3D0%26porc_gasto_nivel_hogar%3D0%26porc_gasto_nivel_comida%3D0%26porc_gasto_nivel_cenas%3D0%26porc_gasto_nivel_viajes%3D0%26porc_gasto_nivel_vacac%3D0%26porc_gasto_nivel_mob%3D0%26porc_gasto_nivel_ropa%3D20%26porc_gasto_nivel_transp%3D30%26porc_gasto_nivel_otros%3D30%26porc_gasto_colegios%3D2%26porc_gasto_univ%3D0%26porc_gasto_master%3D0%26porc_gasto_otros_gastos%3D23%26tengo_casa1%3D1231.11%26tengo_casa2%3D10000%26tengo_casa3%3D22240%26tengo_otras%3D23560%26tengo_monetario%3D1212.34%26tengo_planpensiones%3D23230%26tengo_otros%3D23330%26porc_tengo_casa1%3D1%26porc_tengo_casa2%3D0%26porc_tengo_casa3%3D2%26porc_tengo_otras%3D0%26porc_tengo_monet%3D0%26porc_tengo_plan%3D0%26porc_tengo_otros%3D0%26debo_casa1%3D4340%26debo_casa2%3D23450%26debo_casa3%3D23430%26debo_prestamo1%3D23330%26debo_prestamo2%3D6871.11%26debo_prestamo3%3D11340%26debo_tarjetas%3D61340%26porc_debo_casa1%3D30%26porc_debo_casa2%3D10%26porc_debo_casa3%3D12%26porc_debo_prestamo1%3D1%26porc_debo_prestamo2%3D12%26porc_debo_prestamo3%3D1%26porc_debo_tarjetas%3D4%26plazo_debo_casa1%3D230%26plazo_debo_casa2%3D450%26plazo_debo_casa3%3D122%26plazo_debo_prestamo1%3D3%26plazo_debo_prestamo2%3D12%26plazo_debo_prestamo3%3D4

我算了,它是2568个字符。所以我试图把它分成两部分,因为有“我赚的钱”,“我的债务”等等。问题是,如果我的函数只保存了一些列,那么它只是删除postgres中剩下的一列。怎样才能解决这个问题?

因为我的网页有不同的部分放置数据,我认为一个好主意是为变量的部分创建更小的函数,例如放置30个变量并进行回调。我确实喜欢这个:

function guardaLoQueGano(){
var nivel = parseInt(document.getElementById('progreso_nivel_total').style.marginLeft);

/*idUsusario*/
var usuario =  miGetElementsByClassName('title', document.getElementById('block-user-1'))[0].innerHTML;

/*gano*/
var gano_sal_neto = getValor("gano_sal_neto");
var gano_sal_prof = getValor("gano_sal_prof");
var gano_monet = getValor("gano_monet");
var gano_renta_fija = (getValor("gano_renta_fija"));
var gano_renta_vble = (getValor("gano_renta_vble"));
var gano_inmuebles = (getValor("gano_inmuebles"));
var gano_otros = (getValor("gano_otros"));
var gano_otros_ing = (getValor("gano_otros_ing"));

/*gano porcentajes*/
var porc_gano_monet = getValor("porc_gano_monet");
var porc_gano_rentaf = getValor("porc_gano_rentaf");
var porc_gano_rentav = getValor("porc_gano_rentav");
var porc_gano_inm = getValor("porc_gano_inm");
var porc_gano_otros = getValor("porc_gano_otros");
var porc_gano_otros_ing = getValor("porc_gano_otros_ing");

var param = "&usuario=" + usuario + "&nivel=" + nivel + "&gano_sal_neto=" + gano_sal_neto + "&gano_sal_prof=" + gano_sal_prof + "&gano_monet=" + gano_monet + "&gano_renta_fija=" + gano_renta_fija + "&gano_renta_vble=" + gano_renta_vble + "&gano_inmuebles=" + gano_inmuebles + "&gano_otros=" + gano_otros + "&gano_otros_ing=" + gano_otros_ing +     "&porc_gano_monet=" + porc_gano_monet + "&porc_gano_rentaf=" + porc_gano_rentaf + "&porc_gano_rentav=" + porc_gano_rentav + "&porc_gano_inm=" + porc_gano_inm + "&porc_gano_otros=" + porc_gano_otros + "&porc_gano_otros_ing=" + porc_gano_otros_ing;

var s = document.createElement("script");

s.type = "text/javascript"; s.async = true;
s.src = direccion_servidor + "setMisDatos?callback=respuestaGuardarMisDatos&param=" + encodeURIComponent(param);
var h = document.getElementsByTagName("script")[0];
// adesso h.appendChild(s);
h.parentNode.insertBefore(s, h);
alert("Datos de lo que gano actualizados correctamente");
}

这种函数完美地运行,但是有一个很大的问题:它改变了这个函数的列的值,但是删除了剩下的列。如何创建不同的较小功能,只保存在某些列而不更改其他列?我应该编写netbeans函数setMisDatos以使其更清晰吗?

新发现:

我一直在互联网上搜索,也许发现我的问题是我可能会将GET方法更改为POST协议,因此可能需要任何长度。

在我的页面上有一个用于调用javascript函数的PHP代码:

  <div id="lo_que_gano" class="mis_datos" style="display:none">
<div class="generic todo_izq">

    <div class="ancho_lado_izq generic">
        <div class="texto_form generic">Salario neto</div>
        <div class="generic">
            <input class="numero" id="gano_sal_neto" type="text" value="0" onchange="calculoGano()" onkeypress="tecla('gano_sal_prof', event);"/></br>
        </div>
    </div>
  //all the values that has to be stored
 </div>
 <div class="generic botonGuardar">
    <input type="button" value="Guardar" onclick="return guardaTodo()"/>
 </div>
 </div>

如何将GET方法转换为POST?应该在javascript或php代码中实现吗?对不起,我真的不是这方面的专家。

我试图改变&amp; usuario = with&amp; u =,并且它有效,但是当我尝试更改“gano_sal_neto”(我更改&amp; gano_sal_neto = with&amp; gsn =)时,它会删除相应的postgres表中的值(NULL值)。现在错误在哪里?对不起,我真的不是这方面的专家。

我有一个观察结果:为什么我会在30秒后得到错误,但在间隔时间内却没有?

根据我得到的答案,我所做的改变,从“gano_sal_neto”到“gsn”:

  • 由页面源代码加载的javascript文件;
  • drupal页面的php代码;
  • netbeans文件;
  • 我在与存储数据的表相同的表中创建了一个名为“gsn”的新列。

我缺少什么使新网址有效?

更好地解释现在发生的事情:

我有两种类型的错误:

netbeans日志文件中的

告诉我:

代码: 错误: 显示java.lang.NullPointerException     在com.mirodinero.web.calculos.Calculos.getTotalGano(Calculos.java:182)     在com.mirodinero.web.calculos.CalcularSegmentos.ejecutar(CalcularSegmentos.java:65)     在com.mirodinero.web.servlets.setMisDatos.actualizarSegmentos(setMisDatos.java:543) 这些行的getTotalGano是:

public float getTotalGano() {
    float res = user.getGanoMonet() + user.getGanoRentaFija() + user.getGanoRentaVble() + user.getGanoInmuebles() + user.getGanoOtros() + user.getGanoSalNeto() + user.getGanoSalProf() + user.getGanoOtrosIng();
    return res;
}

和ejecutar()是:

public void ejecutar() {
    boolean existe = true;
    DatosUsuario datosUser = datosUsuarioFacade.findById(atributosUsuario.getIdUsuario());
    if (datosUser != null) {
        List<Cartera> lc = carteraFacade.findByIdUsuario(atributosUsuario.getIdUsuario());
        Calculos c = new Calculos(datosUser, accionesDatosFacade, fondosDatosFacade, bonosDatosFacade, lc);
        ahorroLiquido = c.getTengoDisponible() / c.getTotalGasto();
        ingresoAnual = c.getTotalGano(); /*this is line 65 */
        diferenciaGanoGasto = c.getSupDefTotal();//indica lo que gano menos lo que gasto
        modificarAtributos(c, datosUser);
    }
在postgres日志文件上的

,我得到:

2012-05-22 11:10:46 CESTLOG:  could not receive data from client: Unknown winsock error 10061
2012-05-22 11:10:46 CESTLOG:  unexpected EOF on client connection
2012-05-22 11:19:12 CESTLOG:  CreateProcess call failed: Unknown winsock error 10004 (error code 1115)
2012-05-22 11:19:12 CESTLOG:  could not fork autovacuum worker process: Unknown winsock error 10004

但我不知道这是什么意思。也许有什么我应该用pgadmin来“升级”数据库的变化:我添加了一个名为gsn -real的列,默认0就像gano_sal_neto-,没有删除gano_sal_neto(仍然存储了用户的数据)。

还是没人能帮我这个吗?我不知道在postgres中更改列名称有什么问题,也许我错过了一个程序?

2 个答案:

答案 0 :(得分:1)

答案是更改 glassfish HTTP service收听中的设置:我将超时更改为更大的间隔,现在它可以正常工作!

答案 1 :(得分:0)

因为您正在构建一个<script src=...>元素,并且动态生成src属性,所以无法使用POST。所有HTTP请求都使用GET。您可能能够做的事情是编码您的查询字符串以缩短它。服务器端处理可以解码它以发送正确的脚本文件。

例如,当您可以调用&usario=时,您不需要&u=,因为您的服务器端进程不需要将其称为usario。你这样做就节省了五个字节。

您可以对值进行编码以使其更短,并在服务器端对其进行解码。我不知道数据究竟是什么;这可能不太实际。