编辑:原来我的JavaScript功能无法正常工作,但在修复JavaScript时请帮助解决ASP问题。
编辑2: 使用alert(JSON.stringify(sales))来查看我得到的对象:
{"712":{"KR":1,"LR":0},"713":{"KR":1,"LR":0}}
编辑3:
需要重新编写我的销售脚本,我正在尝试使用对象,但它似乎没有工作,因为我对这部分JS没有太多经验。
var products = {
"KR" : 4,
"LR" : 6
};
var sale = [ ];
function sale(id,product,value)
{
this.id = function prod(product,value)
{
this.product = product;
this.value = value;
}
}
sale("N51","KR",0);
希望你能看到我想要做的事情,但这可能是非常错误的。
感谢这篇长篇文章,它非常有用,我将在上述代码工作后立即处理所有这些
好的,我有这个JavaScript脚本,它将整理单个图像的销售额。
712和713是图像ID。然后KR和LR是产品,如果实际有销售,它只会将它们添加到URL变量中。
function submitSales()
{
//URL Variable
var urlVariable = "?sales=";
for (x in sales)
{
urlVariable = urlVariable + x + "-";
for (s in sales[x])
{
if (sales[x][s] > 0)
{
urlVariable = urlVariable + s + ":" + sales[x][s] + ",";
}
}
}
urlVariable = urlVariable.substring(0, urlVariable.length - 1);
}
如果我为3种产品添加销售额,我会留下以下字符串: ?销售= 712-KR:1,LR:1713-KR:1
现在首先将两张图片分开销售的最佳方式是什么,所以我将留下:
712-KR:1,LR:1 713-KR:1
然后我真的需要将它们放在一个类似于:
的数组中image(0) = 712 = product(0) = KR = 1
product(1) = LR = 1
image(1) = 713 = product(0) = KR = 1
我真的不知道ASP阵列是如何工作的,从我读到的它们实际上很糟糕。
答案 0 :(得分:0)
我真的不知道ASP阵列是如何工作的,从我读到的它们实际上很糟糕。
他们这样做,但在这种情况下并不重要。
首先,你的JavaScript是错误的。
x
和s
永远不会被宣布,因此它们是全球性的。不要这样做,总是用var
声明所有变量。encodeURIComponent()
)。sales
变量作为参数。for .. in
迭代对象。使用hasOwnProperty()
作为安全预防措施。这是一种很好的做法,可以防止对象原型扩展的情况。或者,使用为您提供通用each()
功能的众多JS库中的一个。 Underscore.js,Sugar.js,jQuery都提供了这样的功能。或者自己写一个,就像我在下面做的那样。其次,ASP已经很好地解决了这个问题。
如果在查询字符串中传递多个具有相同名称的参数,则服务器会将它们放入集合中。 (实际上,Request
对象总是包含集合,即使您只传入一次URL参数也是如此。)
所以当你查询
时http://foo/bar?sale=712-KR%3A1&sale=712-LR%3A1&sale=713-KR%3A1
请注意编码的:
然后ASP引擎将在一个集合中提供三个不同的值,如下所示:
"712-KR:1", "712-LR:1", "713-KR:1"
Request("sale")(1)
将为"712-KR:1"
,依此类推。 Request("sale").Count
查找具有任何给定名称的参数数量。此时我建议两件事。
js Helper(如果你已经使用了库,这可能实际上是不必要的)
function each(obj, callback) {
var key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
callback(key, obj[key]);
}
}
}
JS
function submitSales(sales) {
var urlVariable, params = [];
each(sales, function (saleId, sale) {
each(sale, function (itemId, val) {
var param = saleId + "-" + itemId + ":" + val;
if (val > 0) {
params.push( encodeURIComponent(param) );
}
});
});
urlVariable = "?sale=" + params.join("&sale=");
// ...
}
ASP助手
Function NewDict()
Set NewDict = Server.CreateObject("Scripting.Dictionary")
End Function
Function Count(ary)
If IsArray(ary) Then
Count = UBound(ary) - LBound(ary) + 1
Else
Count = vbEmpty
End If
End Function
ASP
Function ParseSales(params)
Dim sales, sale, parts, saleId, value, product
Set sales = NewDict()
For Each sale In params
parts = Split(sale, "-")
saleId = parts(0)
' let's be careful and do a sanity check
If Count(parts) = 2 and IsNumeric(saleId) Then
product = Split(parts(1), ":")
If Count(product) = 2 Then
If Not sales.Exists(saleId) Then
sales.Add saleId, NewDict()
End If
sales(saleId).Add product(0), product(1)
Else
' Invalid parameter format, react accordingly
End If
Else
' Invalid parameter format, react accordingly
End If
Next
Set ParseSales = sales
End Function
现在你可以在服务器端做各种各样的事情了
Dim sales, saleId
Set sales = ParseSales(Request("sales"))
Response.Write sales.Exists("712") ' -> True
Response.Write sales.Exists("714") ' -> False
Response.Write sales("712").Count ' -> 2
Response.Write sales("712")("KR") ' -> 1
Response.Write sales("712").Exists("XR") ' -> False
Response.Write Join(sales.Keys(), "; ") ' -> 712; 713
Response.Write Join(sales("712").Keys(), "; ") ' -> KR; LR
For Each saleId In sales
' saleId will be "712" and so on, use sales(saleId) to get the
' actual object and do something with it
Next