Drupal Web サイトで 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¶m="+encodeURIComponent(param);
var h = document.getElementsByTagName("script")[0];
h.parentNode.insertBefore(s, h); //or h.appendChild(s);
クロムコンソールは、エラーがコピーした最後の行にあることを教えてくれますが、それがどのようなエラーなのかわかりません。
クロムコンソール(具体的には「ネットワーク」コンソール)を使用すると、ステータス/テキスト「失敗」、タイプ「未定義」、サイズ/コンテンツ「13 B / 0 B」で赤く書かれていることがわかります。動作する場合は、ステータス/テキスト「200/OK」、タイプ「テキスト/json」、サイズ/コンテンツ「256 B / 38B」です。私はこれの専門家ではありません。役立つ情報が他にありますか?
このコードは、postgresql データベースにデータを保存する netbeans 関数を起動するため、「保存ボタン」をクリックしたときに保存する必要がある変数が 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¶m=%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文字。「私が稼いだもの」、「私の借金」などがあるので、それを2つの部分に分割しようとしました。この問題はどのように解決できますか?
私のウェブページにはデータを配置する部分が異なるため、変数の部分に対して小さな関数を作成することをお勧めします。たとえば、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¶m=" + 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 コードで実装する必要がありますか? 申し訳ありませんが、私はこれに関する専門家ではありません。
&usuario= を &u= で変更しようとしたところ、うまくいきましたが、「gano_sal_neto」を変更しようとすると (&gano_sal_neto= を &gsn= で変更しました)、postgres テーブルの対応する値 (NULL 値) が削除されます。エラーは今どこにありますか?申し訳ありませんが、私はこれについて専門家ではありません。
そして、私には観察があります:なぜ私は30秒後にエラーが発生するのですか?
私が得た答えに基づいて、「gano_sal_neto」から「gsn」への変更:
- ページのソース コードによって読み込まれる JavaScript ファイル。
- drupal ページの php コード。
- netbeans ファイル;
- データが保存されているのと同じテーブルに「gsn」という名前の新しい列を作成しました。
新しい URL を機能させるには何が欠けていますか?
現在何が起こっているかについてのより良い説明:
私は2種類のエラーがあります:
netbeans ログ ファイルには、次のように表示されます。
コード: エラー: java.lang.NullPointerException at com.mirodinero.web.calculos.Calculos.getTotalGano(Calculos.java:182) at com.mirodinero.web.calculos.CalcularSegmentos.ejecutar(CalcularSegmentos.java:65) at 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を使用する必要があります.gano_sal_netoを削除せずに、gsn -realとデフォルト0という名前の列を追加しました.
まだ誰もこれで私を助けることができませんか? postgres で列名を変更する際の問題は何かわかりません。手順が足りないのかもしれません。