Javascript数组到VBScript
我有一个使用Javascript构建的对象数组,我需要使用VBScript读取它(如下例所示)。在VbScript代码中,我找不到作为Javascript数组到VBScript,javascript,arrays,vbscript,asp-classic,jscript,Javascript,Arrays,Vbscript,Asp Classic,Jscript,我有一个使用Javascript构建的对象数组,我需要使用VBScript读取它(如下例所示)。在VbScript代码中,我找不到作为myArray对象在数组中循环的方法 这个例子简化了我的问题。我无法更改页面的默认语言。myArray对象必须使用javascript构建。必须使用内嵌vbscript输出数组 <%@ Language="VBScript" %> <script language="javascript" runat="server"> var
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
%>
var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
不要使用数组。使用字典对象,如下所示
<%@ 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
%>
var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
var myDictionary=Server.CreateObject(“Scripting.Dictionary”);
对于(var myArrayIndex=0;myArrayIndex
似乎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
%>
var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
0
response.write myArray.shift().name
response.write“
”
环
%>
您可以将打印委托给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>
var myArray=[
{
名称:“对象1”
},
{
名称:“对象2”
},
{
名称:“对象3”
}
];
虽然有点晚了,但您可以向标准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我无法更改页面的默认语言-因此只需更改输出部分的语言即可?@AlexK。据我所知,如果页面的默认语言是vbscript,我就无法编写内联javascript。您当前的javascript不是通过runat=server来编写的吗?@AlexK。
似乎比一切都重要。如果我用响应将其放在页面底部。Write()
生成的文本将显示在页面顶部。添加了一个我所说的脚本的示例。Dictionary
对象是一个不必要的大开销,我不推荐这种方法。@Lankymart我曾考虑删除这篇文章,但这是实现预期结果的另一种方法。Stephen的解决方案要好得多。公平地说,没有必要删除它。在我最初的问题中,我应该解释一下,我的vbscript代码不仅仅是打印出objects name属性。数组是具有许多属性的搜索结果对象的集合,并且有多个内嵌vbscript块与html混合以构建搜索结果列表。使用Response.Write
构建html很麻烦,并且会导致代码很难维护。解决方案“必须”允许内联vbscript在javascript内置的数组中迭代。这是一个很好的解决方案。