Javascript 数组到 VBScript
Javascript array to VBScript
我有一个使用 Javascript 构建的对象数组,我需要使用 VBScript 读取它(如下例所示)。我找不到在我的 VbScript 代码中将数组作为 myArray
对象循环的方法。
这个例子是我的问题的简化。我无法更改页面的默认语言。 myArray
对象必须使用 javascript 构建。必须使用内联 vbscript 输出数组。
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
Response.Write(myArray) ' [object Object],[object Object],[object Object]
'Response.Write(myArray(0)) ' ERROR
'Response.Write(myArray[0]) ' ERROR
Response.Write(myArray.[0]) ' [object Object]
Response.Write(myArray.[0].name) ' object 1
Response.Write(VarType(myArray)) ' 8
Response.Write(myArray.length) ' 3
Response.Write(VarType(myArray.[0])) ' 8
Response.Write(VarType(myArray.[0].name)) ' 8
Response.Write(TypeName(myArray)) ' JScriptTypeInfo
Response.Write(TypeName(myArray.[0])) ' JScriptTypeInfo
' ERROR
' Type mismatch: 'UBound'
'Response.Write(UBound(myArray))
' ERROR
' Object doesn't support this property or method: 'myArray.i'
'Dim i
'For i = 0 To myArray.length - 1
' Response.Write(myArray.[i])
'Next
%>
不要使用数组。使用如下字典对象。
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
var myDictionary = Server.CreateObject("Scripting.Dictionary");
for (var myArrayIndex = 0; myArrayIndex < myArray.length; myArrayIndex++) {
myDictionary.Add(myArrayIndex, myArray[myArrayIndex]);
}
</script>
<%
Dim i
For i = 0 To UBound(myDictionary.Keys)
Response.Write(myDictionary.Item(i).name)
Next
%>
看来 JScript 数组方法仍然可以通过 VBScript 使用:
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
Do While myArray.length > 0
response.write myArray.shift().name
response.write "<br>"
Loop
%>
您可以将打印委托给 JScript 函数:
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
'// vbscript
Response.Write(TypeName(myArray)) ' JScriptTypeInfo
Response.Write printArr(myArray)
'// more vbscript
%>
<script language="javascript" runat="server">
function printArr(arr)
{
for (var i = 0; i < myArray.length; i++)
{
Response.Write("<br />index " + i + " = " + myArray[i].name);
}
}
</script>
晚会有点晚了,但您可以向标准 javascript 数组添加自定义方法。此方法也将在 VBscript 中可用。
所以将此代码添加到您的脚本中:
// add an Item() method to the standard array object so we can iterate arrays in VBscript.
Array.prototype.Item = function(idx) {
return this[idx];
};
你可以使用:
myArray.Item(0)
在 VBscript 中获取数组中的一项。
HTH
我有一个使用 Javascript 构建的对象数组,我需要使用 VBScript 读取它(如下例所示)。我找不到在我的 VbScript 代码中将数组作为 myArray
对象循环的方法。
这个例子是我的问题的简化。我无法更改页面的默认语言。 myArray
对象必须使用 javascript 构建。必须使用内联 vbscript 输出数组。
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
Response.Write(myArray) ' [object Object],[object Object],[object Object]
'Response.Write(myArray(0)) ' ERROR
'Response.Write(myArray[0]) ' ERROR
Response.Write(myArray.[0]) ' [object Object]
Response.Write(myArray.[0].name) ' object 1
Response.Write(VarType(myArray)) ' 8
Response.Write(myArray.length) ' 3
Response.Write(VarType(myArray.[0])) ' 8
Response.Write(VarType(myArray.[0].name)) ' 8
Response.Write(TypeName(myArray)) ' JScriptTypeInfo
Response.Write(TypeName(myArray.[0])) ' JScriptTypeInfo
' ERROR
' Type mismatch: 'UBound'
'Response.Write(UBound(myArray))
' ERROR
' Object doesn't support this property or method: 'myArray.i'
'Dim i
'For i = 0 To myArray.length - 1
' Response.Write(myArray.[i])
'Next
%>
不要使用数组。使用如下字典对象。
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
var myDictionary = Server.CreateObject("Scripting.Dictionary");
for (var myArrayIndex = 0; myArrayIndex < myArray.length; myArrayIndex++) {
myDictionary.Add(myArrayIndex, myArray[myArrayIndex]);
}
</script>
<%
Dim i
For i = 0 To UBound(myDictionary.Keys)
Response.Write(myDictionary.Item(i).name)
Next
%>
看来 JScript 数组方法仍然可以通过 VBScript 使用:
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
Do While myArray.length > 0
response.write myArray.shift().name
response.write "<br>"
Loop
%>
您可以将打印委托给 JScript 函数:
<%@ Language="VBScript" %>
<script language="javascript" runat="server">
var myArray = [
{
name: "object 1"
},
{
name: "object 2"
},
{
name: "object 3"
}
];
</script>
<%
'// vbscript
Response.Write(TypeName(myArray)) ' JScriptTypeInfo
Response.Write printArr(myArray)
'// more vbscript
%>
<script language="javascript" runat="server">
function printArr(arr)
{
for (var i = 0; i < myArray.length; i++)
{
Response.Write("<br />index " + i + " = " + myArray[i].name);
}
}
</script>
晚会有点晚了,但您可以向标准 javascript 数组添加自定义方法。此方法也将在 VBscript 中可用。 所以将此代码添加到您的脚本中:
// add an Item() method to the standard array object so we can iterate arrays in VBscript.
Array.prototype.Item = function(idx) {
return this[idx];
};
你可以使用:
myArray.Item(0)
在 VBscript 中获取数组中的一项。
HTH