目前我必须处理用VB编写的遗留系统.我对VB和ASP不太满意,所以我决定用JScript编写这个系统的新代码.
但是,这两种语言之间的互操作性存在一些问题:即,当我试图调用在<script language="vbscript">tag中声明的某个函数时,它会因" Object expected "错误而失败(如果页面语言是VBScript),反之亦然.
即,以下代码:
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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
失败,出现以下错误:
VBTestFunction: from vbscript
Microsoft VBScript runtime error '800a000d'
Type mismatch: 'JSTestFunction'
/test.asp, line 9
Run Code Online (Sandbox Code Playgroud)
(如果我对特定行进行评论,其他三个语句将正常工作); 将页面语言设置为VBScript
<%@ Language="VBScript" %> …Run Code Online (Sandbox Code Playgroud) 我知道在几次之前已经提出并回答了类似的问题: 在Excel VBA中解析JSON, Excel VBA:解析的JSON对象循环
但是,如果我尝试访问返回对象中的数组,则上述解决方案不起作用.我以下列格式从Google Translate API收到JSON对象:
"{
"sentences":[
{
"trans":"Responsibility\n",
"orig":"??",
"translit":"",
"src_translit":"Zérèn"
},
{
"trans":"Department",
"orig":"??",
"translit":"",
"src_translit":"Bùmén"
}
],
"src":"zh-CN",
"server_time":86
Run Code Online (Sandbox Code Playgroud)
}"
我希望能够将两个翻译的句子作为句子(0)和句子(1)来访问.我可以使用之前帖子中的GetProperty()方法来检索句子对象,但我无法访问其成员,因为它是JScriptTypeInfo类型的对象,而不是数组.
我试图使用类似于此处描述的方法将句子对象转换为JScript中的数组:如何在javaScript和VBA之间传递数组.出于某种原因,我只能让它返回数组的第一个值.
最好的方法是什么?
我有一个array看起来像这样,我怎么能按字母顺序排序而不丢失密钥?
var items = [
{ 11: 'Edward' },
{ 12: 'Sharpe' },
{ 13: 'Alvin' }
];
Run Code Online (Sandbox Code Playgroud) 尝试开始在经典 ASP 中使用 javascript。不过,这似乎有些“陷阱”:有这方面经验的任何人都可以告诉我“Blah2”代码是怎么回事?似乎它“应该”起作用,但我对“this”的使用似乎有问题......
<script language="javascript" runat="server">
var Blah = {};
Blah.w = function(s){Response.write(s);}
Blah.w('hello'); //this works...
var Blah2 = function(){
this.w = function(s){Response.write(s);}
//line above gives 'Object doesn't support this property or method'
return this;
}();
Blah2.w('hello');
</script>
Run Code Online (Sandbox Code Playgroud)
感谢您的任何指点
蒂姆
说,我有以下代码,我使用 Windows Script Host 作为 .JS 文件运行:
try
{
ProduceAnError();
}
catch(e)
{
//How to get an error line here?
}
Run Code Online (Sandbox Code Playgroud)
有没有办法知道发生错误(异常)的错误行?
我有一个返回构造函数的 javascript 函数(请参阅下面的代码示例)。我将如何使用 jsdoc 的 @returns 标签来记录这一点。执行 @returns {MyConstructor} 似乎不正确,因为这意味着我返回的是“MyConstructor”的实例而不是构造函数本身,对吗?
function MyConstructor() {
var self = this;
self.myFunction = function() {
return true;
};
self.getMyFunctionResult = function() {
return self.myFunction();
};
}
/**
* @returns {?} A constructor that will be instantiated
*/
function getConstructor() {
return MyConstructor;
}
var constructor = getConstructor();
var instance = new constructor();
Run Code Online (Sandbox Code Playgroud) 我有以下批处理代码。但是,此代码只会调高我的 PC 音量,但我也想调低我的音量。我怎样才能做到这一点?
@if (@a==@b) @end /*
:: Batch portion
@echo off
cscript /e:jscript "%~f0"
:: JScript portion */
var shl = new ActiveXObject("WScript.Shell");
for (var i = 0; i < 5; i++) {
shl.SendKeys(String.fromCharCode(0xAF));
}
Run Code Online (Sandbox Code Playgroud) 我正在使用cscript.exe运行我的JScript文件.在脚本中,我需要调用外部控制台命令并获取输出.
尝试:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c dir');
WScript.Echo("Status "+oExec.Status);
WScript.Echo("ProcessID "+oExec.ProcessID);
WScript.Echo("ExitCode "+oExec.ExitCode);
Run Code Online (Sandbox Code Playgroud)
和
var oShell = WScript.CreateObject("WScript.Shell");
var ret = oShell.Run('cmd /c dir', 1 /* SW_SHOWNORMAL */, true /* bWaitOnReturn */);
WScript.Echo("ret " + ret);
Run Code Online (Sandbox Code Playgroud)
但没有运气:该命令运行(最有可能)没有错误,但我没有输出.请注意'cmd/c dir'这里只是一个示例,以确保我得到任何输出.
那么,我该怎么做呢?
更新: 我试图将此/sf/answers/425121931/转换为JScript,但也没有运气:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c dir');
var strOutput = oExec.StdOut.ReadAll;
WScript.Echo("StdOut "+strOutput);
var strOutput = oExec.StdErr.ReadAll;
WScript.Echo("StdErr "+strOutput);
Run Code Online (Sandbox Code Playgroud)
该错误是Microsoft JScript runtime error: Object doesn't support …
我正在看一下在VB6和Active Server Pages(JScript)中使用90年代编写的旧Web应用程序.应用程序从数据库中检索一些数据并将其存储在用于更新的记录集中.当它尝试更新字段时(见下文),它会出现'80040e21'错误.
rsSave.Fields('text') = Request.Form('strText').Item(i); // this line fails
Run Code Online (Sandbox Code Playgroud)
我检查了字段的类型,它是adVarWChar(202).我检查了'text'字段的大小是2000,比从表单中提取的大.我检查了所有字段的状态,它们都是adFieldOK(0).换句话说,通常出现此错误的任何常见嫌疑人都可以.
正在创建,填充然后返回记录集的COM +对象正在执行以下操作:
'Initialize command object
Set oCmd = CreateObject("ADODB.Command")
With oCmd
.CommandType = adCmdText
.CommandText = strsql
End With
Set cn = CreateObject("ADODB.Connection")
'Open connection to database
cn.Open strConn
oCmd.ActiveConnection = cn
Set rs = CreateObject("ADODB.Recordset")
With rs
Set .Source = oCmd
.LockType = adLockBatchOptimistic
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.Open
Set .ActiveConnection = Nothing
End With
Run Code Online (Sandbox Code Playgroud)
我尝试使用adLockOptimistic,但没有运气.
最后但并非最不重要的是,这个应用程序最初使用的是旧的Microsoft OleDb for Oracle,它不再与Windows Server 2008兼容.我们不得不使用新的提供程序,从那时起需要调整一些东西才能正常工作.
有任何想法吗?
我正在尝试使用 javascript 运行 bat 文件。我试过使用 powershell,但它似乎无法正常工作。这是我试过的代码:
var oShell = WScript.CreateObject("WScript.Shell");
oShell.Exec("D:");
oShell.Exec("cd dir");
oShell.Exec("start user.bat");
Run Code Online (Sandbox Code Playgroud)
我也试过:
var oShell = WScript.CreateObject("WScript.Shell");
oShell.Exec("start D:\dir\user.bat");
Run Code Online (Sandbox Code Playgroud)
有时它会运行,有时我会收到这些错误“预期的十六进制数字”、“访问被拒绝”。我真的很困惑。我想要做的就是从一个 javascript 文件执行一个 bat 文件。
任何人都知道该怎么做?谢谢!
jscript ×10
javascript ×5
asp-classic ×3
wsh ×3
batch-file ×2
ado ×1
alphabetical ×1
arrays ×1
cmd ×1
com+ ×1
excel ×1
jsdoc ×1
jsdoc3 ×1
json ×1
sorting ×1
vb6 ×1
vba ×1
vbscript ×1
volume ×1
windows ×1