Attualmente devo gestire il sistema legacy scritto in VB. Non sto bene con VB e ASP, quindi ho deciso che il nuovo codice per questo sistema verrà scritto in JScript.Chiamare una funzione scritta su VB da un codice JScript (ASP classico)
Tuttavia, c'è qualche problema con l'interoperabilità tra le due lingue: vale a dire, quando sto cercando di chiamare una qualche funzione dichiarata in <script language="vbscript">
tag, fallisce con un "Previsto oggetto" errore (se la lingua della pagina è VBScript) e viceversa.
Vale a dire, il seguente codice:
inc.asp
<script language="vbscript" runat="server">
Sub VBTestFunction(Message)
Response.Write "VBTestFunction: " & Message
End Sub
</script>
<script language="javascript" runat="server">
function JSTestFunction(Message) {
Response.Write("JSTestFunction: " + Message);
}
</script>
testjs.asp
<%@ Language="JavaScript" %>
<!-- #include file="inc.asp"-->
<script language="javascript" runat="server">
VBTestFunction("from javascript");
JSTestFunction("from javascript");
</script>
<script language="vbscript" runat="server">
Call VBTestFunction("from vbscript")
Call JSTestFunction("from vbscript")
</script>
non riesce con il seguente errore:
VBTestFunction: from vbscript
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'JSTestFunction'
/test.asp, line 9
(se commenterò la riga specifica, le altre tre dichiarazioni funzioneranno correttamente); impostare la lingua della pagina per VBScript
<%@ Language="VBScript" %>
<!-- #include file="inc.asp"-->
<script language="javascript" runat="server">
VBTestFunction("from javascript");
JSTestFunction("from javascript");
</script>
<script language="vbscript" runat="server">
Call VBTestFunction("from vbscript")
Call JSTestFunction("from vbscript")
</script>
non riesce con il seguente errore:
Microsoft JScript runtime error '800a138f'
Object expected
/test.asp, line 4
(ancora una volta, se sarò commentare la riga specifica, altre tre affermazioni funzionano bene).
C'è un MSDN article sulla combinazione di VB e JS nella stessa applicazione, ma dall'articolo sembra che il codice di esempio dovrebbe funzionare, come TestFunction
è dichiarato in un altro file ed è una funzione dopo tutto.
C'è un modo per rendere tutto funzionante e chiamare entrambi VBTestFunction
e JSTestFunction
dal codice VB e JS? Immagino che ce ne dovrebbe essere uno, altrimenti non sarebbe il caso di mischiare JS e VB.
Osserva attentamente l'articolo che hai menzionato, in particolare la parte in cui si dice "Server Script Order of Execution". Il tuo problema sta lì. –
L'articolo disegna in particolare la linea tra il flusso del codice principale ("script del server in linea") e la dichiarazione delle subroutine. Dall'articolo sembra che una subroutine possa essere dichiarata in qualsiasi lingua e che io sia in grado di chiamarla da qualsiasi lingua. – penartur