Vbscript Dim或ReDim问题?

Vbscript Dim或ReDim问题?,vbscript,Vbscript,我有一个关于经典ASP的问题: 有人能告诉我这段代码中我做错了什么吗?如果ORDERDATA()只包含一个条目,则可以正常工作。如果不止一个,它就会崩溃。我很确定这与CARTITEMS()变量的Dim/ReDim有关,但我看不出我做错了什么 脚本的其他部分使用了一些变暗的变量,请忽略它们 Dim i,countOrderRows, orderdata, XXX orderdata = Order_GetOrderData() countOrderRows = ubound(orderd

我有一个关于经典ASP的问题:

有人能告诉我这段代码中我做错了什么吗?如果ORDERDATA()只包含一个条目,则可以正常工作。如果不止一个,它就会崩溃。我很确定这与CARTITEMS()变量的Dim/ReDim有关,但我看不出我做错了什么

脚本的其他部分使用了一些变暗的变量,请忽略它们

Dim i,countOrderRows, orderdata, XXX
orderdata = Order_GetOrderData()

    countOrderRows = ubound(orderdata,1)

    Dim cartItems()
    ReDim cartItems(countOrderRows-1)

    Dim goodsList(), addr, klarnaresponse, resp, sql, item
    ReDim goodsList(countOrderRows-1)

    for i = 0 to countOrderRows - 1 

        Set item = Server.CreateObject("Scripting.Dictionary")

        item.Add "reference", "XX1"
        item.Add "name", orderdata(i,2)
        item.Add "quantity", cint(orderdata(i,5))
        item.Add "unit_price", (cint(orderdata(i,3)*100))
        item.Add "discount_rate", 0
        item.Add "tax_rate", 2500

        Set cartItems(i) = item
        Set item = nothing

    next
希望你们能帮忙


关于,Bob

假设Order\u GetOrderData()是格式为的多维数组

function Order_GetOrderData ()
    dim myArray(0,5)
    myArray(0, 0) = "XX1"
    myArray(0, 1) = "G66T"
    myArray(0, 2) = "An Item"
    myArray(0, 3) = "3"
    myArray(0, 4) = "0"
    myArray(0, 5) = "100"
    Order_GetOrderData = myArray
end function
-1countOrderRows中的三个位置删除,允许我返回每次迭代的项目值

Dim i,countOrderRows, orderdata, XXX
orderdata = Order_GetOrderData()

countOrderRows = ubound(orderdata, 1)

Dim cartItems()
ReDim cartItems(countOrderRows)

Dim goodsList(), addr, klarnaresponse, resp, sql, item
ReDim goodsList(countOrderRows)

for i = 0 to countOrderRows

    Set item = Server.CreateObject("Scripting.Dictionary")

    item.Add "reference", "XX1"
    item.Add "name", orderdata(i,2)
    item.Add "quantity", cint(orderdata(i,5))
    item.Add "unit_price", (cint(orderdata(i,3)*100))
    item.Add "discount_rate", 0
    item.Add "tax_rate", 2500

    Set cartItems(i) = item
    Set item = nothing

next


response.write cartItems(0).item("name")
response.write cartItems(1).item("name")

etc.
原因是,ubound(orderdata,1)以零为基的形式返回行数,因此,当只存在一个结果时,从中减去1将得到负值


我不确定当你传递一个项目而不是多个项目时,为什么你的代码能工作。使用“我的假设数据”提供的示例适用于多个项目,只要您希望从数据集的开头返回,但如果只返回一个项目,则始终会失败。它可能与Order\u GetOrderData()?

返回的数组的格式有关,假设Order\u GetOrderData()是该格式的多维数组

function Order_GetOrderData ()
    dim myArray(0,5)
    myArray(0, 0) = "XX1"
    myArray(0, 1) = "G66T"
    myArray(0, 2) = "An Item"
    myArray(0, 3) = "3"
    myArray(0, 4) = "0"
    myArray(0, 5) = "100"
    Order_GetOrderData = myArray
end function
-1countOrderRows中的三个位置删除,允许我返回每次迭代的项目值

Dim i,countOrderRows, orderdata, XXX
orderdata = Order_GetOrderData()

countOrderRows = ubound(orderdata, 1)

Dim cartItems()
ReDim cartItems(countOrderRows)

Dim goodsList(), addr, klarnaresponse, resp, sql, item
ReDim goodsList(countOrderRows)

for i = 0 to countOrderRows

    Set item = Server.CreateObject("Scripting.Dictionary")

    item.Add "reference", "XX1"
    item.Add "name", orderdata(i,2)
    item.Add "quantity", cint(orderdata(i,5))
    item.Add "unit_price", (cint(orderdata(i,3)*100))
    item.Add "discount_rate", 0
    item.Add "tax_rate", 2500

    Set cartItems(i) = item
    Set item = nothing

next


response.write cartItems(0).item("name")
response.write cartItems(1).item("name")

etc.
原因是,ubound(orderdata,1)以零为基的形式返回行数,因此,当只存在一个结果时,从中减去1将得到负值

我不确定当你传递一个项目而不是多个项目时,为什么你的代码能工作。使用“我的假设数据”提供的示例适用于多个项目,只要您希望从数据集的开头返回,但如果只返回一个项目,则始终会失败。这可能与订单返回的数组的格式有关

将基于0的最大索引分配给
countOrderRow
,而不是元素数

稍后,您将使用
countOrderRows
,就好像它包含了元素的数量:

ReDim cartItems(countOrderRows-1)
对于维度1中只有一个元素的orderdata,这将执行ReDim(…,-1),这不是您想要的,但是嘿

那么,为什么这不会产生错误是另一个问题;)

然后,你用

for i = 0 to countOrderRows-1
迭代这是错误的。
UBound
返回可接受的最大索引。对于一个元素,这是0。因为countOrderRows等于0,所以您正在尝试

for i = 0 to -1
这也不是你想要的

这就是为什么只对一个元素有效(似乎有效):从0到-1的
循环执行零次。如果有多个元素,则执行循环代码,并且由于涉及的索引和数组大小错误而失败

注意:我故意不只是吐出修改过的代码,而是试图引导您自己修复这个bug

将基于0的最大索引分配给
countOrderRow
,而不是元素数

稍后,您将使用
countOrderRows
,就好像它包含了元素的数量:

ReDim cartItems(countOrderRows-1)
对于维度1中只有一个元素的orderdata,这将执行ReDim(…,-1)
,这不是您想要的,但是嘿

那么,为什么这不会产生错误是另一个问题;)

然后,你用

for i = 0 to countOrderRows-1
迭代这是错误的。
UBound
返回可接受的最大索引。对于一个元素,这是0。因为countOrderRows等于0,所以您正在尝试

for i = 0 to -1
这也不是你想要的

这就是为什么只对一个元素有效(似乎有效):从0到-1的
循环执行零次。如果有多个元素,则执行循环代码,并且由于涉及的索引和数组大小错误而失败

注意:我故意不只是吐出修改过的代码,而是试图引导您自己修复这个bug