【问题标题】:Assigning values to javascript array elements doesn’t work when looped (classic .asp), but it works without looping, why?循环时(经典 .asp)无法为 javascript 数组元素赋值,但不循环时它可以工作,为什么?
【发布时间】:2015-07-01 12:00:07
【问题描述】:

我正在使用经典的 .asp。 我有以下内容:

<script language="javascript">
var JSintTotal = <% =intTotal%>;
var JSarrHotelsProdCols = Create2DArray(JSintTotal);
<%
for x = 0 to intTotal - 1
response.write  "JSarrHotelsProdCols["&x&"][0] =  "&arrHotelsProdCols(0,x)&"';" & vbCrLf
response.write  "JSarrHotelsProdCols["&x&"][1] = '"&arrHotelsProdCols(1,x)&"';" & vbCrLf
response.write  "JSarrHotelsProdCols["&x&"][2] = '"&arrHotelsProdCols(2,x)&"';" & vbCrLf
response.write  "JSarrHotelsProdCols["&x&"][3] = '"&arrHotelsProdCols(3,x)&"';" & vbCrLf
next

%>
</script>

Create2DArray() 函数工作正常,我从这个站点抓取。

如果我注释掉 for/next 循环并使 x=0,这将使用 arrHotelsProdCols(0,0) 到 arrHotelsProdCols( 3,0)。打开 .asp 页面后,我使用警报功能 onDblClick 进行检查。

我还可以看到写入“页面源”的文本:

JSarrHotelsProdCols[0][0] = '4 MEX HOTEL & LIVING';
JSarrHotelsProdCols[0][1] = '3 STAR';
JSarrHotelsProdCols[0][2] = '2KM';
JSarrHotelsProdCols[0][3] = '8KM';

但是,当我运行 for/next 循环时,我无法使用相同的警报函数看到 JSarrHotelsProdCols 数组中的值,但我可以看到所有 612 x 4 语句都正确写入“页面源”中。

为什么当我循环这个分配时这不起作用,但当我不循环它时它起作用?

如果您需要更多信息,请告诉我,我不确定多少才够。

谢谢。

【问题讨论】:

  • ecarrizo,任何人,[x][0] 列文本有时包含一个撇号,如 St. Paul's。因此,当我在 612 行中循环时,我遇到了其中一个案例并繁荣了。有没有办法处理撇号或我不应该允许他们?

标签: javascript arrays asp-classic


【解决方案1】:

循环内的第一行缺少撇号。改变...

response.write  "JSarrHotelsProdCols["&x&"][0] =  "&arrHotelsProdCols(0,x)&"';" & vbCrLf

...到...

response.write  "JSarrHotelsProdCols["&x&"][0] =  '"&arrHotelsProdCols(0,x)&"';" & vbCrLf

您可以在 JavaScript 中使用反斜杠转义可能位于数组值内的撇号,例如 Replace(arrHotelsProdCols(0,x), "'", "\'")。或者,您可以用双引号替换单引号(如果数组值中不存在双引号),例如...

response.write  "JSarrHotelsProdCols["&x&"][0] =  """&arrHotelsProdCols(0,x)&""";" & vbCrLf

(请注意,双引号是重复的,因为如果它们已经在 VBScript 字符串中,则 VBScript 需要这样做)

【讨论】:

  • 谢谢约翰。上面缺少的撇号在张贴到这个论坛时丢失了。用双引号替换撇号适用于我拥有的数据。您提到的替换是 Javascript 替换吗?我正在将值从 vbarray (arrHotelsProdCols) 移动到 javascript 数组 (JSarrHotelsProdCols),如果无法先填充数组,则替换将不起作用?
  • arrHotelsProdCols(0,x) = Replace(arrHotelsProdCols(0,x), "'", "`")
  • Replace 是 VBScript,将在服务器端进行替换,而不是在生成的客户端 JavaScript 中。
猜你喜欢
  • 2016-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-11
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多