Javascript 将多个URL参数传递给经典ASP
Edit:原来我的JavaScript函数没有像我想的那样工作,但请在我修复JavaScript时帮助解决ASP问题。 编辑2: 使用alert(JSON.stringify(sales))查看对象,我得到以下结果:Javascript 将多个URL参数传递给经典ASP,javascript,asp-classic,Javascript,Asp Classic,Edit:原来我的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
{"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阵列是如何工作得那么好的,从我所读到的来看,它们实际上很糟糕
我真的不知道ASP阵列是如何工作得那么好的,从我所读到的来看,它们实际上很糟糕
确实如此,但在这种情况下,这并不重要
一般材料
首先,您的JavaScript是错误的
和x
从不声明,因此它们是全局的。不要这样做,总是用s
声明所有变量var
- 您没有正确编码URL参数。这肯定会爆炸,请始终使用正确的编码(
)encodeURIComponent()
- 避免依赖全局变量。将
变量作为参数传入sales
- 避免为..使用裸露的
中迭代对象。使用。。在
作为安全预防措施。这是针对对象原型已扩展的情况进行辩护的良好实践。或者,使用提供通用hasOwnProperty()
函数的众多JS库中的一个。Underline.js、Sugar.js和jQuery都提供了这样的功能。或者自己写一个,就像我在下面做的那样each()
请求
对象始终包含集合,即使只传入一次URL参数。)
所以当你询问
http://foo/bar?sale=712-KR%3A1&sale=712-LR%3A1&sale=713-KR%3A1
- 此集合基于1,因此
将是请求(“销售”)(1)
,依此类推李>“712-KR:1”
- 您可以使用
查找任意给定名称的参数数量Request(“sale”).Count
- 重写客户端代码,使其发送具有相同名称的多个参数
- 切换到ASP端,而不是尝试使用数组
函数解析销售(参数)
Dim销售、销售、零件、销售额、价值、产品
Set sales=NewDict()
以params进行的每次销售
零件=拆分(销售,“-”)
saleId=零件(0)
“让我们小心点,做一次精神检查
如果计数(部件)=2且为数字(saleId),则
产品=拆分(第(1)部分,“:”)
如果计数(乘积)=2,则
如果不存在sales.Exists(saleId),则
sales.Add saleId,NewDict()
如果结束
销售(saleId)。添加产品(0),产品(1)
其他的
'参数格式无效,请作出相应反应
如果结束
其他的
'参数格式无效,请作出相应反应
如果结束
下一个
设置销售=销售
端函数
现在,您可以在服务器端执行各种操作
Dim销售,saleId
Set sales=ParseSales(请求(“销售”))
Response.Write sales.Exists(“712”)”->True
Response.Write sales.Exists(“714”)”->False
回复。写销售(“712”)。计数'->2
回复。写销售(“712”)(“KR”)”->1
Response.Write sales(“712”)。存在(“XR”)”->False
Response.Write Join(sales.Keys(),“;”)->712;713
响应。写入Join(sales(“712”).Keys(),“;”)->KR;LR
对于销售中的每个saleId
'saleId将是“712”,以此类推,使用sales(saleId)获取
'实际对象并对其进行处理
下一个
请在JS中发布您的sales
对象的结构。不过,ASP不会获得该结构,它将获得通过url变量传递的内容。顺便说一句,当然您可以在ASP端使用JScript而不是VBScript。在这种情况下,您可以简单地将整个JS对象作为JSON字符串传递。请您向我解释一下您的代码,它似乎不起作用,如果我在末尾警告urlVariable,我只得到“?sale=”。saleId和itemId变量在回调函数中来自何处。我读了一遍又一遍,脑子都转不过来了。我很确定你调用submitSales时没有参数,这就是为什么你的不起作用。(我建议不要依赖全局sales
变量。)您应该在该函数中设置断点,并在浏览器的开发人员工具中逐行遍历代码。这应该很容易理解
"712-KR:1", "712-LR:1", "713-KR:1"
function each(obj, callback) {
var key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
callback(key, obj[key]);
}
}
}
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=");
// ...
}