0

クロムコンソールから得たメッセージ 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&param="+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&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文字。「私が稼いだもの」、「私の借金」などがあるので、それを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&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 コードで実装する必要がありますか? 申し訳ありませんが、私はこれに関する専門家ではありません。

&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 で列名を変更する際の問題は何かわかりません。手順が足りないのかもしれません。

4

2 に答える 2

1

答えは、glassfish HTTP serviceリスニングの設定を変更することでした: タイムアウトをより大きな間隔に変更したところ、動作するようになりました!

于 2012-05-29T10:36:01.910 に答える
0

<script src=...>動的に生成された属性を使用して要素を作成しているためsrc、POST を使用することはできません。すべての HTTP 要求は GET を使用します。代わりにできることは、クエリ文字列をエンコードして短くすることです。サーバー側の処理では、それをデコードして正しいスクリプト ファイルを送信できます。

たとえば、サーバー側のプロセスでそれを&usario=呼び出す必要がないため、 when you can call it は必要ありません。それだけで 5 バイト節約できました。&u=usario

値をエンコードして短くし、サーバー側でデコードできます。データが実際に何であるかはわかりません。これは実際的ではないかもしれません。

于 2012-05-19T15:52:51.543 に答える