Which alternative to replace ASP code with JavaScript?

2

I have this code in asp and javascript .

<%if trim(ind_tipo_proposta_pj) = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);    
            <%end if%>

I need to make it cleaner, without the asp tags. What happens is that I have a lot of doubt when the subject is asp . Well, a few days ago colleague TobyMosque helped me a lot in doing something similar. I'm not here asking you to do it for me, otherwise I'll always be asking, but a tip or a line to follow. My attempt went into this:

if()
var onum_seq_proposta_pj_ts = "<%= trim(nome_campo_cod_ts) %>" || "";
var onum_seq_proposta_ts    = "<%= trim(nome_campo_cod_ts) %>"

I could not finish the if and I also do not know if ou is correct. Note that there is a if in asp , if it is legal, it loads a variable, otherwise it carries another variable. I wonder if I kill if of asp and put if of js , if tilt. I could also do a ternary, but how to do this in a one-variable statement. I would do in if , but in the statement I do not know if it is possible (I think not). How do I, or rather, which way to go?

Making my attempts here I got to this code, but I do not know if to be right, because to test I will have to change a lot more things, but just tell me. This is the way? I did not kill 100% of the asp , but it gave an optimized percentage of asp .

var onum_seq_proposta_pj_ts = null;
var onum_seq_proposta_ts    = null;
<%if trim(ind_tipo_proposta_pj) = "S" then%>
   onum_seq_proposta_pj_ts = "<%= trim(nome_campo_cod_ts) %>" || onum_seq_proposta_ts = "<%= trim(nome_campo_cod_ts) %>";
<%end if%>

Okay, actually the variables txt_prefixo and txt_sufixo are variable. They already know how to treat. See how they're declared:

    var txt_prefixo = '';
    var txt_sufixo  = '';

  try{
       txt_prefixo = '.document.form01.';
       txt_sufixo  = '';
       ......

TobyMosque, is this how I should use the object?

var txt_prefixo = '';
var txt_sufixo  = '';
window["objeto"] = null;


        var nome_campo_cod_ts_id = "<%= trim(nome_campo_cod_ts) %>";

        var onum_seq_proposta_pj_ts = null;
        var onum_seq_proposta_ts = null;
        var txt_chamada = "";

        var onum_seq_proposta_pj_ts_id = "<%= trim(ind_tipo_proposta_pj)%>" == "S";

        if(onum_seq_proposta_pj_ts_id)
            window[txt_chamada][txt_prefixo][onum_seq_proposta_pj_ts][txt_sufixo];
        else
            window[txt_chamada][txt_prefixo][onum_seq_proposta_ts][txt_sufixo];

I'm actually having a hard time deleting this try..catch , that is, replacing with a cleaner javascript code:

try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if trim(ind_tipo_proposta_pj) = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);    
            <%end if%>
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%end if%>
        }

This try..catch is within that if in ASP:

<%if trim(nome_campo_cod_ts)<> "" then%>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if trim(ind_tipo_proposta_pj) = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);    
            <%end if%>
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>' + txt_sufixo);
            <%end if%>
        }
    <% else %>
        try {
            txt_prefixo = '.document.form01.';
            txt_sufixo  = '';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_pj_ts' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_ts' + txt_sufixo);
            <%end if%>
        } catch (e) {
            txt_prefixo = '.document.all[\'';
            txt_sufixo  = '\']';
            <%if ind_tipo_proposta_pj = "S" then%>
                var onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_pj_ts' + txt_sufixo);
            <%else%>
                var onum_seq_proposta_ts    = eval(txt_chamada + txt_prefixo + '<%Response.Write prefixo%>num_seq_proposta_ts' + txt_sufixo);
            <%end if%>
        }
    <%end if%>
    
asked by anonymous 13.08.2015 / 21:54

2 answers

2

Why do not you write the values of the variables ind_tipo_proposta_pj nome_campo_cod_ts and prefixo into HTML fields of type hidden , as soon as ASP is executed, then you can manipulate it with javascript. Remember to put the fields before the code JavaScript because the server already "wrote" the fields with the values and you will be able to manipulate them with JavaScript :

<input type="hidden" name="ind_tipo_proposta_pj" id="ind_tipo_proposta_pj" value="<%= trim(VARIAVEL_DO_ASP_TIPO_PROPOSTA) %>"/>
<input type="hidden" name="nome_campo_cod_ts" id="nome_campo_cod_ts" value="<%= trim(VARIAVEL_DO_ASP_NOME_CAMPO_COD_TS) %>"/>
<input type="hidden" name="prefixo" id="prefixo" value="<%= trim(VARIAVEL_DO_ASP_PREFIXO) %>"/>

So yes, you use everything in JavaScript:

var onum_seq_proposta_pj_ts = null;
var onum_seq_proposta_ts = null;
var txt_chamada = "";
var txt_prefixo = "";
var txt_sufixo = "";

var campo_ind_tipo_proposta_pj_que_veio_do_asp = document.getElementById('ind_tipo_proposta_pj').value;
var campo_nome_campo_cod_ts_que_veio_do_asp = document.getElementById('nome_campo_cod_ts').value;
var campo_prefixo_que_veio_do_asp = document.getElementById('prefixo').value;
var prefixo_do_banco_de_dados = (campo_prefixo_que_veio_do_asp + "" + campo_nome_campo_cod_ts_que_veio_do_asp)

if (campo_ind_tipo_proposta_pj_que_veio_do_asp == "S") {
  eval(txt_chamada + txt_prefixo + prefixo_do_banco_de_dados + txt_sufixo);

} else {
  eval(txt_chamada + txt_prefixo + prefixo_do_banco_de_dados + txt_sufixo);
}
<input type="hidden" name="ind_tipo_proposta_pj" id="ind_tipo_proposta_pj" value="S" />
<input type="hidden" name="nome_campo_cod_ts" id="nome_campo_cod_ts" value="" />
<input type="hidden" name="prefixo" id="prefixo" value="document.write('ok');" />

The problem there my friend is that for both physical and legal persons the variable onum_seq_proposta_pj_ts and onum_seq_proposta_ts will be the same. Because if you look at the corresponding code in the original script ASP , the variables are the same <%Response.Write prefixo%><%Response.Write nome_campo_cod_ts%>

    
13.08.2015 / 22:28
2

pnet, taking advantage of the Maicom idea, you can put the variables inside a tag script in your ASP page:

<script type="text/javascript">
    var asp = {};
    asp.ind_tipo_proposta_pj = "<%= ind_tipo_proposta_pj %>";
    asp.prefixo = "<%= prefixo %>";
    asp.nome_campo_cod_ts = "<%= nome_campo_cod_ts %>";
</script>

By doing so, you will face the same problem as putting in input: hidden, the user can change the value coming from ASP.

Then you can do the following to lock these values:

<script type="text/javascript">
    var asp = {};
    Object.defineProperty(asp, "ind_tipo_proposta_pj", { value: "<%= ind_tipo_proposta_pj %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "prefixo", { value: "<%= prefixo %>", writable: false, enumerable: true, configurable: true });
    Object.defineProperty(asp, "nome_campo_cod_ts", { value: "<%= nome_campo_cod_ts %>", writable: false, enumerable: true, configurable: true });
</script> 

Now that you have all these variables in memory, you can work on a separate * .js.

var onum_seq_proposta_pj_ts = null;
var onum_seq_proposta_ts = null;
if (asp.ind_tipo_proposta_pj.trim() === "S")
    onum_seq_proposta_pj_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_cod_ts + txt_sufixo);
else
    onum_seq_proposta_ts = eval(txt_chamada + txt_prefixo + asp.prefixo + asp.nome_campo_cod_ts + txt_sufixo);

The problem with the code above is the use of eval, I particularly do not like to mount javaScript dynamically this way, so let's approach an alternative.

When we talk about javaScript in the browser, all global variables / functions are actually properties of the window object.

Then all the statements below are equivalent:

var objeto = null;
window.objeto = null;
window["objeto"] = null;

In the case of a dynamic call, the first two forms do not interest us, but note the third, I can pass the variable name as an object.

then instead of doing something like this:

var prefixo1 = "teste1.";
var prefixo2 = "teste2.";
var propriedade = "teste3";
var valor = eval(prefixo1 + prefixo2 + propriedade);

We can have something like this:

var prefixo1 = "teste1";
var prefixo2 = "teste2";
var propriedade = "teste3";
var valor = window[prefixo][prefixo2][propriedade];

In this way you can evaluate the value of this property through the browser watch (in the case of chrome / operates the "Chrome" DevTools [F12]).

    
14.08.2015 / 15:23