Vbscript Dim或ReDim问题?
我有一个关于经典ASP的问题: 有人能告诉我这段代码中我做错了什么吗?如果ORDERDATA()只包含一个条目,则可以正常工作。如果不止一个,它就会崩溃。我很确定这与CARTITEMS()变量的Dim/ReDim有关,但我看不出我做错了什么 脚本的其他部分使用了一些变暗的变量,请忽略它们Vbscript Dim或ReDim问题?,vbscript,Vbscript,我有一个关于经典ASP的问题: 有人能告诉我这段代码中我做错了什么吗?如果ORDERDATA()只包含一个条目,则可以正常工作。如果不止一个,它就会崩溃。我很确定这与CARTITEMS()变量的Dim/ReDim有关,但我看不出我做错了什么 脚本的其他部分使用了一些变暗的变量,请忽略它们 Dim i,countOrderRows, orderdata, XXX orderdata = Order_GetOrderData() countOrderRows = ubound(orderd
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
将-1从countOrderRows中的三个位置删除,允许我返回每次迭代的项目值
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
将-1从countOrderRows中的三个位置删除,允许我返回每次迭代的项目值
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