0

我从 chrome 控制台收到的消息 我在一个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”,输入“文本/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。这是实际的错误吗?我能做些什么来解决它?

我一直在互联网上搜索,可能我的问题是 URL 太长,

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 协议,以便它可以采用任何长度。

在我的页面上有一个 php 代码来调用 javascript 函数,即:

  <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代码中实现吗?对不起,我真的不是这方面的专家。

我尝试用 &u= 更改 &usuario=,它可以工作,但是当我尝试更改“gano_sal_neto”(我用 &gsn= 更改了 &gano_sal_neto=)时,它将删除 postgres 表中的相应值(NULL 值)。现在哪里出错了?对不起,我真的不是这方面的专家。

我有一个观察结果:为什么我在 30 秒后会出错,但不是在那个间隔内?

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

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

为了使新 URL 正常工作,我缺少什么?

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

我有两种类型的错误:

在 netbeans 日志文件中,它告诉我:

代码:错误:com.mirodinero.web.calculos.CalcularSegmentos.ejecutar(CalcularSegmentos.java:65) 处 com.mirodinero.web.calculos.Calculos.getTotalGano(Calculos.java:182) 处的 java.lang.NullPointerException。 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 中更改列名有什么问题,也许我缺少一个程序?

4

2 回答 2

1

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

于 2012-05-29T10:36:01.910 回答
0

因为你正在做的是构造一个<script src=...>元素,src动态生成属性,所以不可能使用 POST。所有 HTTP 请求都使用 GET。您可以做的是对您的查询字符串进行编码以使其更短。服务器端处理可以对其进行解码以发送正确的脚本文件。

例如,您不需要&usario=何时调用它,&u=因为您的服务器端进程不应该需要调用它usario。通过这样做,您已经节省了五个字节。

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

于 2012-05-19T15:52:51.543 回答